RxSwift筆記(3) - 特征序列(下)

四、Driver

Driver(司機(jī)?)?是一個精心準(zhǔn)備的特征序列。它主要是為了簡化 UI 層的代碼。不過如果你遇到的序列具有以下特征,你也可以使用它:

不會產(chǎn)生?error?事件

一定在?MainScheduler?監(jiān)聽(主線程監(jiān)聽)

共享附加作用

這些都是驅(qū)動 UI 的序列所具有的特征。


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


a's

asDriver()返回了self.asDriver的閉包,直接進(jìn)去看


self.asObservable()返回的是一個Observable序列,點(diǎn)進(jìn)去看Driver的這個初始化方法,subscribeOn()序列是在主線程上執(zhí)行


observeOn(DriverSharingStrategy.scheduler)表示在DriverSharingStrategy.scheduler這個線程上發(fā)送通知



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


當(dāng)出現(xiàn)error,會被替換成一個空元素。

返回一個Driver對象,

點(diǎn)進(jìn)去找初始化方法,Driver實(shí)際上是一個SharedSequence(共享隊(duì)列)的別名


初始化方法


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


2、訂閱序列


其他的調(diào)用順序就和核心方法里的類似了,就不在詳細(xì)描述了。

五、Signal

Signal和Driver的特征相似,唯一的區(qū)別是Driver會對新觀察者回放(重新發(fā)送)上一個元素,而?Signal不會對新觀察者回放上一個元素,這個區(qū)別是有share()方法決定的,具體如何實(shí)現(xiàn)的以后再說。



六、ControlEvent

ControlEvent?專門用于描述?UI?控件所產(chǎn)生的事件,它具有以下特征:

不會產(chǎn)生?error?事件

一定在?MainScheduler?訂閱(主線程訂閱)

一定在?MainScheduler?監(jiān)聽(主線程監(jiān)聽)

共享附加作用

1、直接看例子


?UIButton.init().rx.tap即為一個ControlEvent序列


點(diǎn)進(jìn)去看controlEvent()方法


?guard let control = control 做了nil判斷,當(dāng)對象為nil直接返回一個只有一個completed事件的序列

直接看這句


點(diǎn)擊進(jìn)去看,紅色畫框部分給control添加了點(diǎn)擊了點(diǎn)擊事件 selector為事件執(zhí)行方法



由上可知,點(diǎn)擊后會進(jìn)到剛才的閉包中


后面的和核心方法中的流程類似了,最后會在外面的閉包B中執(zhí)行


ControlEvent的初始化方法標(biāo)明了該類型序列會在主線程上執(zhí)行
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容