RxSwift笔记(3) - 特征序列(下)

四、Driver

Driver(司机?) 是一个精心准备的特征序列。它主要是为了简化 UI 层的代码。不过如果你遇到的序列具有以下特征,你也可以使用它:

不会产生 error 事件

一定在 MainScheduler 监听(主线程监听)

共享附加作用

这些都是驱动 UI 的序列所具有的特征。


1、我们拿上面的代码做例子,研究Driver的特性, UIButton.init().rx.tap是一个controlEvent序列,先不用管它,直接看后面的


a's

asDriver()返回了self.asDriver的闭包,直接进去看


self.asObservable()返回的是一个Observable序列,点进去看Driver的这个初始化方法,subscribeOn()序列是在主线程上执行


observeOn(DriverSharingStrategy.scheduler)表示在DriverSharingStrategy.scheduler这个线程上发送通知



由上可知DriverSharingStrategy.scheduler表示主线程


当出现error,会被替换成一个空元素。

返回一个Driver对象,

点进去找初始化方法,Driver实际上是一个SharedSequence(共享队列)的别名


初始化方法


SharingStrategy是DriverSharingStrategy,SharingStrategy.share(source)的share()方法即为,返回的是一个共享序列。


2、订阅序列


其他的调用顺序就和核心方法里的类似了,就不在详细描述了。

五、Signal

Signal和Driver的特征相似,唯一的区别是Driver会对新观察者回放(重新发送)上一个元素,而 Signal不会对新观察者回放上一个元素,这个区别是有share()方法决定的,具体如何实现的以后再说。



六、ControlEvent

ControlEvent 专门用于描述 UI 控件所产生的事件,它具有以下特征:

不会产生 error 事件

一定在 MainScheduler 订阅(主线程订阅)

一定在 MainScheduler 监听(主线程监听)

共享附加作用

1、直接看例子


 UIButton.init().rx.tap即为一个ControlEvent序列


点进去看controlEvent()方法


 guard let control = control 做了nil判断,当对象为nil直接返回一个只有一个completed事件的序列

直接看这句


点击进去看,红色画框部分给control添加了点击了点击事件 selector为事件执行方法



由上可知,点击后会进到刚才的闭包中


后面的和核心方法中的流程类似了,最后会在外面的闭包B中执行


ControlEvent的初始化方法标明了该类型序列会在主线程上执行

你可能感兴趣的:(RxSwift笔记(3) - 特征序列(下))