RxSwift订阅<bool>更改依赖于一个变量(MVVM)

时间:2018-03-31 11:17:13

标签: ios swift observable reactive-programming system.reactive

开始学习RxSwift(Realm课程)并提出一些问题。

在我的控制器中有一个TextField和Button,当我的TextField.count&gt;我需要订阅Button.isEnable。 0

在课程中,这个问题解决了下一个代码:

在控制器设定值中:

userNameText.rx.text.orEmpty.bind(to: viewModel.userName).disposed(by: disposeBag)
passwordText.rx.text.orEmpty.bind(to: viewModel.passwordValue).disposed(by: disposeBag)
viewModel.isValid.map{$0}.bind(to: button.rx.isEnabled).disposed(by: disposeBag)

模特:

let userName = Variable<String>("")
    let passwordValue = Variable<String>("")
    let isValid: Observable<Bool>

    init() {
        isValid = Observable.combineLatest(self.userName.asObservable(), self.passwordValue.asObservable()) {(name, password) in
            return  name.count > 0 && password.count > 0
        }
    }

当然使用 Observable.combineLatest 来创建具有2值的observable,我们观察到它。(使用2值)

如何使用一个值创建Observable?

P.S不能这样工作(分钟2)

isValid = Observable.combineLatest(self.passwordValue.asObservable()) {(name) in
                return  name.count > 0 && password.count > 0
            }

1 个答案:

答案 0 :(得分:1)

只是做:

self.isValid = self.passwordValue.asObservable().map{ password in
    password.count > 0 
}