我想構建一個可以根據變量的值輸出一個值的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歐元區不會被調用!
這背後的原因是:
- 的全名變量被綁定到一個的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())
}
}
的視圖控制器:
func bindModel() -> Void {
_ = txFullName.rx.textInput <-> model!.fullName
......
}
解決,但我不明白如何。 我對錶單的每個TextField使用相同的模式:名爲isMyTextFieldOK的Observable計算一些業務規則。最後一個觀察結果是組合最大的所有isMyTextFieldOK觀察值。我確實在這最後一個可觀察對象上附加了一個處置(通過:disposeBag)調用。刪除它解決了一切。但我不知道爲什麼。 :-( – t4ncr3d3