前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift中的双向数据绑定

Swift中的双向数据绑定

原创
作者头像
iminder
修改2018-10-22 15:46:21
5.2K0
修改2018-10-22 15:46:21
举报
文章被收录于专栏:iOSiOS

双向绑定在我们的开发中有时候也是会用到的,比如MVVM中,ViewModel绑定到一个UI控件,当ViewModel发生变化时,控件跟着变化,而当我们改变控件值时,ViewModel也跟着变化。双向绑定是一种双向的观察-监听者模式。下面就探索几种双向绑定方式。

Data binding
Data binding

RxSwift

使用RxSwift可以很简单的实现双向绑定,我们定义一个ViewModel:

代码语言:txt
复制
struct UserViewModel {
    var userName = BehaviorRelay<String>(value:"your name")
}

把一个ViewModel的对象绑定到一个UITextField上。

代码语言:txt
复制
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 "<->"来做双向绑定,这种方法更加简洁

代码语言:txt
复制
_= textField.rx.textInput <-> self.userModel.userName

Bond

Bond 是一个基于ReactiveKit实现的绑定库,利用它可以很容易的实现数据绑定操作。

定义ViewModel,

代码语言:txt
复制
import Bond
import ReactiveKit

struct UserViewModel {
    var isToggleOn = Property<Bool>(false)
}

设置一个UISwitch,并将viewModel的isToggleOn属性绑定到UISwitch的isOn上

代码语言:txt
复制
userModel.isToggleOn.bidirectionalBind(to: switchOn.reactive.isOn)

这样就实现了双向数据绑定。

参考文章:

https://qianye520.github.io/2018/05/23/RxSwift/Grammar/Two-Way-Binding-%E5%8F%8C%E5%90%91%E7%BB%91%E5%AE%9A/

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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RxSwift
  • Bond
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档