RxSwift基于变量构建一个Observable

时间:2017-03-07 19:42:21

标签: ios swift observable rx-swift rx-cocoa

我正在尝试构建一个Observable,它将根据Variable的值输出一个值。

类似的东西:

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
            }

不幸的是,map func中的bloc永远不会被调用!

背后的原因是:

  1. 使用双向运算符&lt; - &gt;将fullName变量绑定到UITextField。如RxSwift示例中所定义。
  2. 将观察isFullNameOKObs Observable 隐藏或显示我的ViewController的提交按钮。
  3. 非常感谢任何帮助。

    由于

    模型

    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
        ......
    
    }
    

1 个答案:

答案 0 :(得分:4)

您是否需要UITextFieldVariable之间的双向约束?

如果没有,我建议您尝试使用bindTo(),而不是这样: myTextField.rx.text.orEmpty.bindTo(fullName).disposed(by: disposeBag)