ios - RxSwift 订阅 <Bool> 变化取决于一个变量 (MVVM)

标签 ios swift observable reactive-programming system.reactive

开始学习 RxSwift(领域类(class))并提出一些问题。

在我的 Controller 中有一个 TextField 和一个 Button,当我的 TextField.count > 0 时,我需要订阅 Button.isEnable

在类(class)中这个问题解决了下一个代码:

在 Controller 中设置值:

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

在类(class)中使用 Observable.combineLatest 创建具有 2 个值的可观察对象,我们对此进行观察。(使用 2 个值)

如何在我们使用一个值的情况下创建 Observable?

P.S 不是这样工作的(最少 2 分钟)

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

最佳答案

只是做:

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

关于ios - RxSwift 订阅 <Bool> 变化取决于一个变量 (MVVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49587115/

相关文章:

ios - 为什么即使没有 NSCoding 协议(protocol)也会对类进行序列化

ios - 如何在 swift 中从另一个类中获取 tableView 的引用

ios - 在 CloudKit 谓词中使用 CONTAINS 或 ANY 以及比较数组

swift - 我如何转换为像 : MyType<ConformingX> (ConformingX is a class that conforms to a protocol) 这样的通用类型

iOS:多行 UILabel 与水平 UIStackView 中的另一个 UILabel 的大小错误

ios - 如何使用 Swift 在文本字段(从右到左)输入货币格式?

Swift:将泛型类型限制为闭包

java - 观察者模式或其他模式

javascript - 处理由 from() 创建的 observable 中的 promise 抛出的错误