ReactiveZ 0.1.1

ReactiveZ 0.1.1

Sowattana维护。



ReactiveZ 0.1.1

  • Sowattana

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
})