2017-03-07 29 views
7

変数の値に基づいて値を出力するObservableを構築しようとしています。RxSwift変数に基づいてObservableを構築する

そのような何か:

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 
      } 

残念ながら地図FUNCでブロックが呼び出されることはありません!

  1. のfullName変数は双方向オペレータ<とするUITextFieldにバインドされる - > RxSwift例で定義されている:

    この背後にある理由は、ということです。

  2. isFullNameOKObs Observableが表示されます私のViewControllerの送信ボタンを非表示または表示します。

ご協力いただければ幸いです。

おかげ

モデル

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

は解決が、私はどのように理解していません。 フォームの各TextFieldに同じパターンを使用します。ビジネスルールを計算するisMyTextFieldOKという名前のObservable。すべてのisMyTextFieldOKオブザーバブルのcombineLatestである最終的なオブザーバブルです。私はこの最後の観測で廃棄された(by:disposeBag)コールを添付しました。それを削除するとすべてが解決されました。しかし、私は理由を知らない。 :-( – t4ncr3d3

答えて

4

あなたは双方向UITextFieldとあなたのVariable間の結合が必要ですか?

ない場合、私はあなたがちょうどこのよう代わりにbindTo()を使用しようとすることをお勧め: myTextField.rx.text.orEmpty.bindTo(fullName).disposed(by: disposeBag)

+0

変更されていません変数はUITextFieldによって正しく更新されますが、Observableの値は正しい状況を反映していません – t4ncr3d3

+0

'isFullNameOKObs'をボタンにバインドするにはどうすればいいですか? – BStien

+0

まだそれを行う方法が決まっていません – t4ncr3d3

関連する問題