编程思想
- 用同步的方式,编写处理异步事件的代码。是基于异步 Event(事件)序列的响应式编程。它可以简化异步编程方法,并提供更优雅的数据绑定。让我们可以时刻响应新的数据的同时顺序地处理它们。
我们可以定义一个以时间为维度的数组,它的元素是异步发生的事件。当事件发生时,我们就把它自动添加到这个数组里。然后,我们可以做两个事情,一方面,可以对添加进来的事件进行“二次加工”,筛选出符合我们要求的事件形态;另一方面,我们还可以添加对应事件的处理方法,这也就是某种形式的”订阅”。
例如:RxSwift 给UITextField
添加了一个新的属性rx_text
,我们暂时忽略掉它的具体类型,把它理解为就是那个“以时间为维度的数组”就可以了。
而这个数组中事件的值,就是每一次用户输入之后,当前UITtextField
中的字符串(注意:这里指的是输入之后,UITextField
中的字符串,不是每一次用户输入的单个字符)。
定义事件
对于每一个添加到“数组”中的事件,都存在三种可能:
- 成功:对于
UITextField
例子来说,就是用户输入了一个字符,让UITextField
有了新的值; - 失败:在处理类似网络请求时,会处理这种事件;
- 完成:表示“数组”中再也不会添加新的事件;
RxSwift 使用enum来表示它,但是对于不同类型的成功事件,它包含的值有可能是不相同的,因此,它使用一个泛型的enum来表达一个发生的事件:
/// Binds event to user interface.
///
/// - In case next element is received, it is being set to control value.
/// - In case error is received, DEBUG buids raise fatal error, RELEASE builds log event to standard output.
/// - In case sequence completes, nothing happens.
public func on(_ event: Event<E>) {
switch event {
case .error(let error):
bindingError(error)
case .next:
_valueSink.on(event)
case .completed:
_valueSink.on(event)
}
}
网友评论