2017-03-07 29 views
7

पर आधारित एक अवलोकन योग्य बनाएं, मैं एक अवलोकन योग्य बनाने की कोशिश कर रहा हूं जो एक चर के मूल्य के आधार पर मूल्य का उत्पादन करेगा।RxSwift एक वेरिएबल

कुछ इस तरह:

let fullName = Variable<String>("") 
let isFullNameOKObs: Observable<Bool> 

isFullNameOKObs = fullName 
      .asObservable() 
      .map { (val) -> Bool in 
       // here business code to determine if the fullName is 'OK' 
       let ok = val.characters.count >= 3 
       return ok 
      } 

दुर्भाग्य से नक्शा समारोह में गुट कभी नहीं कहा जाता है!

  1. FULLNAME चर द्विदिश ऑपरेटर < के साथ एक UITextField से आबद्ध है -> RxSwift उदाहरण में परिभाषित के रूप में:

    इसके पीछे कारण यह है कि है।

  2. isFullNameOKObs Observable पर देखा जाएगा मेरे व्यू कंट्रोलर के सबमिट बटन को छुपाएं या प्रदर्शित करें।

किसी भी मदद की सराहना की जाएगी।

धन्यवाद

मॉडल

class Model { 

    let fullName = Variable<String>("") 
    let isFullNameOKObs: Observable<Bool> 

    let disposeBag = DisposeBag() 

    init(){ 

     isFullNameOKObs = fullName 
      .asObservable() 
      .debug("isFullNameOKObs") 
      .map { (val) -> Bool in 
       let ok = val.characters.count >= 3 
       return ok 
      } 
      .debug("isFullNameOKObs") 


     isRegFormOKObs = Observable.combineLatest(
      isFullNameOKObs, 
      is...OK, 
      ...) { $0 && $1 && ... } 


     isRegFormOKObs 
      .debug("isRegFormOKObs") 
      .asObservable() 
      .subscribe { (event) in 
       // update the OK button 
      } 
      // removing this disposedBy resolved the problem 
      //.disposed(by: DisposeBag()) 

    } 
} 

ViewController:

func bindModel() -> Void { 

    _ = txFullName.rx.textInput <-> model!.fullName 
    ...... 

} 
+0

हल, लेकिन मैं कैसे समझ में नहीं आता। मैं फॉर्म के प्रत्येक टेक्स्टफिल्ड के लिए एक ही पैटर्न का उपयोग करता हूं: एक अवलोकन योग्य नाम MyTextFieldOK है जो कुछ व्यावसायिक नियमों की गणना करता है। एक अंतिम अवलोकन जो कि एक गठबंधन है, सबसे महत्वपूर्ण है MyTextFieldOK अवलोकन। मैंने इस अंतिम अवलोकन योग्य पर एक डिस्पोजेड (द्वारा: डिस्पोजेबैग) कॉल किया था। इसे हटाने से सबकुछ हल हो गया। लेकिन मुझे नहीं पता क्यों। :-( – t4ncr3d3

उत्तर

4

आप दो तरह से UITextField और अपने Variable के बीच बंधन की ज़रूरत है?

यदि नहीं, तो मैं तुम्हें सिर्फ इस तरह के बजाय bindTo() इस्तेमाल करने की कोशिश सुझाव है: myTextField.rx.text.orEmpty.bindTo(fullName).disposed(by: disposeBag)

+0

नहीं बदलता है। वेरिएबल को यूआईटीएक्स्टफिल्ड द्वारा सही ढंग से अपडेट किया गया है। लेकिन वेधशाला का मूल्य अभी भी सही स्थिति को प्रतिबिंबित नहीं करता है। – t4ncr3d3

+0

आप अपने बटन पर 'isFullNameOKObs' कैसे बांधते हैं? कृपया कोड को साझा करें' – BStien

+0

का उपयोग कर फिर भी यह निर्धारित नहीं किया है कि इसे कैसे किया जाए। – t4ncr3d3

संबंधित मुद्दे