ios - 使用 RXSwift 将视图控制器中的元组或字符串绑定到视图模型
问题描述
我需要绑定一个元组(String,Int)来查看模型
class ViewModel {
var firstAttempt = PublishSubject<(password: String, count: Int)>()
var isValidFirstAttempt: Observable<Bool> {
return firstAttempt.asObservable().map{
if $0.count < 4 {
self.onShowError.onNext("error")
return false
}
return true
}
}
let onShowError = PublishSubject<String>()
视图控制器
class ViewController: UIViewController {
var viewModel = ViewModel()
var firstAttempt = BehaviorRelay<(value:String, count: Int)>(value: ("", 0))
func bindControllerComponent() {
firstAttempt.bind(to: viewModel.firstAttempt).disposed(by: disposeBag)
viewModel.firstAttempt.bind(to: firstAttempt).disposed(by: disposeBag)
}
在视图控制器中执行self.firstAttempt.accept(("password", 4))
我想更改视图模型是否可能?
解决方案
这应该可以帮助您:
class ViewModel {
let firstAttempt = PublishSubject<(password: String, count: Int)>()
var isValidFirstAttempt: Observable<Bool> {
return firstAttempt.map { 3 < $0.count }
}
var onShowError: Observable<String> {
return firstAttempt.filter { $0.count < 4 }.map { _ in "error" }
}
}
class ViewController: UIViewController {
var viewModel = ViewModel()
let firstAttempt = BehaviorRelay<(password: String, count: Int)>(value: ("", 0))
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
firstAttempt.bind(to: viewModel.firstAttempt).disposed(by: disposeBag)
viewModel.isValidFirstAttempt
.bind(onNext: { print("isValid?", $0) })
.disposed(by: disposeBag)
viewModel.onShowError
.bind(onNext: { [weak self] message in
let alert = UIAlertController(title: "Error", message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self?.present(alert, animated: true, completion: nil)
})
.disposed(by: disposeBag)
}
}
推荐阅读
- git - Git Revert 导致合并冲突虽然没有?
- backup - 点燃从备份节点读取过时的数据
- azure - Azure 容器注册表 - 401 未经授权的错误
- firebase - Flutter 登录如何使用 Snackbar 显示 FirebaseAuthException 消息
- oracle-nosql - Oracle Nosql 云服务是否可以设置每秒最大读取单位消耗?
- angular - createAction 使用 ngrx V9 发送模型效果
- c# - WPF中的iOS UIPickerView-like
- mysql - 如何在 centos 中启用 mysql 5.7 34 中的 InnoDB
- c++ - 如何在 C++ 中使用 Eigen lib 创建块对角稀疏矩阵?
- c++ - 访问多维 std::array 元素的问题