美文网首页
RxSwift笔记(3) - 特征序列(下)

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

作者: 左腿丶 | 来源:发表于2021-01-10 16:24 被阅读0次

    四、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) - 特征序列(下)

          本文链接:https://www.haomeiwen.com/subject/hbdfaktx.html