Bind

Bind 是一个用于简单响应式编程的框架,旨在替代像 RxSwift 这样的框架。它可以与 Promise 的实现一起使用,例如 When

Output (输出)

Output 是一个存储通用可变属性和一组闭包的容器,当该属性更新时,这些闭包将被调用。在我们的架构中,Output 通常在 View Model 中使用。

Initialising (初始化)

一个 Output 使用它的初始值进行初始化,或者以 nil 作为其初始值开始。

Updating (更新)

Output 存储的值可以通过调用其 update 函数来更新。该函数还会调用绑定到 Output 的任何闭包。

Bind

调用 bind 函数之一会将一个闭包添加到由 Output 维护的闭包字典中,并且如果存在当前存储的值,也会调用该闭包。

bind 可以直接使用闭包调用,也可以通过传递一个或多个 Binder 调用

Binder (绑定器)

Binder 定义了一个在 Output 更新时要调用的闭包。 Binder 通常从符合 Bindable 的类型的扩展返回。 Bind 包含一组用于许多 UIKit 类的 Bindable 扩展,以便 Output 可以直接绑定到这些类。自定义类可以类似地扩展以符合 BindableBindableCompatible。在我们的架构中,View Model 中的 Output 通常从 View Controller 的 viewDidLoad 方法绑定到 View 的 BindableCompatible 元素。

Relay (中继)

RelayOutput 的一个特殊子类,对于启动响应式事件链很有用。它是一个不存储任何值的 Output,但当其 fire 方法被调用时,将调用任何存储的闭包。

Subscription (订阅)

SubscriptionSubscriptionContainer 提供了一种机制,用于从 Output 解绑闭包,并且在使用可重用元素(如 TableView 单元格)时非常有用。

Functional Extensions (函数式扩展)

Bind 还包含一些函数式扩展,允许以各种方式转换 Output

combine 将两个类型分别为 A 和 B 的 Output 合并为一个新的类型为 (A, B) 的 Output,每当其中一个更新且另一个有值时,该 Output 就会更新。

merge 接受两个相同类型的 Output,并创建一个新的该类型的 Output,每当其中一个更新时,该 Output 就会更新。

map 对一个 Value 执行转换,并将其作为 TransformedValue 包装在其自己的 Output 中返回。transform 属性是将 Value 转换为 TransformedValue 的函数,map 返回类型为 TransformedValueOutput

flatMap 对一个 Value 执行转换,并通过展平嵌套的 Outputs 将其作为类型为 TransformedValueOutput 返回。transform 属性是将 Value 转换为一个新的类型为 TransformedValueOutput 的函数,flatmap 返回一个展平的类型为 TransformedValueOutput