rx-swift - RxSwift:如何将 Bool 更改为 ObservableType?
问题描述
我是 RxSwift 的新手,我想实现这一点:
一个titleTextField、一个descTextField、一个confirmButton 和一个submitButton。
submitButton 是 unEnable 直到 titleTextField 和 descTextField 的 text.count >= 5 并选择了 confirmButton,所以我写了这些代码:
let titleValid = titleTextField.rx.text.orEmpty.map { (text) -> Bool in
return text.count >= 5
}
let descValid = descTextField.rx.text.orEmpty.map { (text) -> Bool in
return text.count >= 5
}
let isConfirm = confirmButton.rx.isSelected.asObserver().mapObserver { (selected) -> Bool in
return selected
}
Observable.combineLatest(titleValid, descValid, isConfirm) { $0 && $1 && $2 }.bind(to: submitButton.rx.isEnabled).disposed(by: disposeBag)
它适用于titleValid
and descValid
,但是,有一个错误isConfirm
:
Argument type 'AnyObserver<Bool>' does not conform to expected type 'ObservableType'
我该如何isConfirm
更改ObservableType
?如何纠正它?
注意 RxSwift 的版本是 5.0.0
解决方案
评论包含您的答案。重要的是敲击confirmButton
。
let titleValid = titleTextField.rx.text.orEmpty.map { (text) -> Bool in
return text.count >= 5
}
let descValid = descTextField.rx.text.orEmpty.map { (text) -> Bool in
return text.count >= 5
}
let isConfirm = confirmButton.rx.tap
.scan(false) { current, _ in !current }
.startWith(false)
isConfirm
.bind(to: confirmButton.rx.isSelected)
.disposed(by: disposeBag)
Observable.combineLatest(titleValid, descValid, isConfirm) { $0 && $1 && $2 }
.bind(to: submitButton.rx.isEnabled)
.disposed(by: disposeBag)
推荐阅读
- php - Woocommerce - no-products-found.php - 添加联系表单简码
- vb.net - 您如何允许 vb.net 基本 winforms 控件检测控件外部的单击
- bash - 在需要在单引号内包含反引号的命令中替换变量
- ruby-on-rails - 仅当存在时如何在 HAML 中显示某些内容?
- javascript - 将 Promise 返回的值压入数组
- python - MacOS 上的 Pipenv 问题“TypeError: 'module' object is not callable”
- php - 在 WordPress 插件激活时创建表(样板文件)
- html - 具有行/列操作的 ng-repeat 中的 Angularjs Contenteditable
- c - 基数排序 C 的分段错误
- java - TestNG:如何从多个类中指定测试方法顺序?