8

我正在尝试构建一个 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
            }

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

这背后的原因是:

  1. fullName 变量通过 RxSwift 示例中定义的双向运算符 <-> 绑定到 UITextField。
  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())

    }
}

视图控制器:

func bindModel() -> Void {

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

}
4

1 回答 1

4

UITextField你需要在和你的之间的双向绑定Variable吗?

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

于 2017-03-07T19:54:24.830 回答