ReactiveZ
轻量级的 Swift 反应式编程库。它为 UIControls 提供双向绑定。
安装
ReactiveZ 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile
pod 'ReactiveZ'
使用
ObservableField
使任何类型的变量变为可观察的。
let name: ObservableField<String> = ObservableField("")
let age: ObservableField<Int> = ObservableField(0)
let money: ObservableField<Double> = ObservableField(0.0)
let contacts: ObservableField<[String]> = ObservableField([])
您也可以简写为:
let name = ObservableField("")
它还支持自定义对象和可选包装。
let student: ObservableField<Student?> = ObservableField(nil)
要从 ObservableField 获取值,我们使用:
print(name.get())
为了将值设置到 ObservableField 中,我们使用:
name.set(value: "Example")
观察者
用于观察可观察类型。
let nameObserver = Observer<String>()
let ageObserver = Observer<Int>()
绑定 & 观察
观察是单向绑定,观察者只能观察可观察类型的值变化。
nameObserver.observe(observable: name)
绑定是双向绑定,观察者可以观察和改变可观察类型的值。
nameObserver.bind(to: name)
您可以匿名观察 ObservableField 对象,而无需创建观察者。
name.observe { (value) in
print(value)
}
注意:一个 ObservableField 可以被多个观察者观察。一个观察者只能观察或绑定到一个 ObservableField。
更新 & 获取值
更新值到
nameObserver.update(value: "Tata")
获取值
print(nameObserver.get())
与 UIControls 绑定
当与 UIControls 一起使用时,我们使用 rz
属性来简化绑定。目前,我们只支持以下控件
UIControls | 绑定属性 |
---|---|
UITextField | text |
UILabel | text |
UIImageView | image |
UIButton | title |
使用方法
let disposal = Disposal()
textField.rz.bind(to: name, disPosal: disposal) // name is ObservableField
注意:当您绑定到 UIControl 时,需要执行
Disposal
以防止内存泄漏。
您必须在停止使用观察者时调用 dispose。
deinit {
disposal.dispose()
}
映射值
当绑定不同类型的 Observer 和 ObservableField 时需要映射值。
let age: ObservableField<Int> = ObservableField(0)
let ageMessageObserver = Observer<String>()
ageMessageObserver.bind(to: age, map: { (value) -> String in
return "My age is \(value)"
}, mapBack: { (value) -> Int in
return value == "reset" ? 0 : 20
})