双向绑定在我们的开发中有时候也是会用到的,比如MVVM中,ViewModel绑定到一个UI控件,当ViewModel发生变化时,控件跟着变化,而当我们改变控件值时,ViewModel也跟着变化。双向绑定是一种双向的观察-监听者模式。下面就探索几种双向绑定方式。
使用RxSwift可以很简单的实现双向绑定,我们定义一个ViewModel:
struct UserViewModel {
var userName = BehaviorRelay<String>(value:"your name")
}
把一个ViewModel的对象绑定到一个UITextField上。
userModel.userName.asObservable().bind(to: textField.rx.text).disposed(by: disposeBag)
textField.rx.text.orEmpty.bind(to: userModel.userName).disposed(by: disposeBag)
此时就实现了双向绑定,我们改变其中一个值,另外一个值也会跟着改变。
也可以使用RxSwift示例代码中给的Operators.swift里面实现的Operator "<->"来做双向绑定,这种方法更加简洁
_= textField.rx.textInput <-> self.userModel.userName
Bond 是一个基于ReactiveKit实现的绑定库,利用它可以很容易的实现数据绑定操作。
定义ViewModel,
import Bond
import ReactiveKit
struct UserViewModel {
var isToggleOn = Property<Bool>(false)
}
设置一个UISwitch,并将viewModel的isToggleOn属性绑定到UISwitch的isOn上
userModel.isToggleOn.bidirectionalBind(to: switchOn.reactive.isOn)
这样就实现了双向数据绑定。
参考文章:
https://www.raywenderlich.com/667-bond-tutorial-bindings-in-swift
https://codeburst.io/swift-mvvm-two-way-binding-win-b447edc55ff5
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。