変数の値に基づいて値を出力する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でブロックが呼び出されることはありません!
- のfullName変数は双方向オペレータ<とするUITextFieldにバインドされる - > RxSwift例で定義されている:
この背後にある理由は、ということです。
- 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
......
}
は解決が、私はどのように理解していません。 フォームの各TextFieldに同じパターンを使用します。ビジネスルールを計算するisMyTextFieldOKという名前のObservable。すべてのisMyTextFieldOKオブザーバブルのcombineLatestである最終的なオブザーバブルです。私はこの最後の観測で廃棄された(by:disposeBag)コールを添付しました。それを削除するとすべてが解決されました。しかし、私は理由を知らない。 :-( – t4ncr3d3