除了可觀察序列Observable
姆泻,RxSwift
還為我們提供了一些特征序列(Traits):Single
、Completable
冒嫡、Maybe
拇勃、Driver
、ControlEvent
孝凌。
我們可以將這些 Traits
看作是 Observable
的另外一個(gè)版本方咆。
1.Single
Single
是 Observable
的另外一個(gè)版本。但它不像Observable
可以發(fā)出多個(gè)元素蟀架,它要么只能發(fā)出一個(gè)元素瓣赂,要么產(chǎn)生一個(gè)error
事件。
- 發(fā)出一個(gè)元素片拍,或一個(gè)
error
事件 - 不會(huì)共享狀態(tài)變化
應(yīng)用場(chǎng)景:
Single
比較常見的例子就是執(zhí)行HTTP
請(qǐng)求煌集,然后返回一個(gè)應(yīng)答或錯(cuò)誤。不過我們也可以用Single
來描述任何只有一個(gè)元素的序列捌省。
asSingle()
我們可以通過調(diào)用Observable
序列的.asSingle()
方法苫纤,將它轉(zhuǎn)換為 Single
2.Completable
Completable
是 Observable
的另外一個(gè)版本。不像Observable
可以發(fā)出多個(gè)元素纲缓,它要么只能產(chǎn)生一個(gè)completed
事件卷拘,要么產(chǎn)生一個(gè) error
事件。
- 不會(huì)發(fā)出任何元素
- 只會(huì)發(fā)出一個(gè)
completed
事件或者一個(gè)error
事件 - 不會(huì)共享狀態(tài)變化
應(yīng)用場(chǎng)景
Completable
和Observable<Void>
有點(diǎn)類似祝高。適用于那些只關(guān)心任務(wù)是否完成栗弟,而不需要在意任務(wù)返回值的情況。比如:在程序退出時(shí)將一些數(shù)據(jù)緩存到本地文件褂策,供下次啟動(dòng)時(shí)加載横腿。像這種情況我們只關(guān)心緩存是否成功。
3.Maybe
Maybe
同樣是Observable
的另外一個(gè)版本斤寂。它介于 Single
和 Completable
之間,它要么只能發(fā)出一個(gè)元素揪惦,要么產(chǎn)生一個(gè) completed
事件遍搞,要么產(chǎn)生一個(gè)error
事件。
- 發(fā)出一個(gè)元素器腋、或者一個(gè) completed 事件溪猿、或者一個(gè) error 事件
不會(huì)共享狀態(tài)變化
應(yīng)用場(chǎng)景
Maybe 適合那種可能需要發(fā)出一個(gè)元素钩杰,又可能不需要發(fā)出的情況。
asMaybe()
我們可以通過調(diào)用 Observable
序列的 .asMaybe()
方法诊县,將它轉(zhuǎn)換為 Maybe
讲弄。
4.Driver
如果我們的序列滿足如下特征,就可以使用它:
- 不會(huì)產(chǎn)生
error
事件 - 一定在主線程監(jiān)聽(
MainScheduler
) - 共享狀態(tài)變化(
shareReplayLatestWhileConnected
)
為什么要使用 Driver
?
(1)Driver
最常使用的場(chǎng)景應(yīng)該就是需要用序列來驅(qū)動(dòng)應(yīng)用程序的情況了依痊,比如:
通過
CoreData
模型驅(qū)動(dòng)UI
使用一個(gè)
UI
元素值(綁定)來驅(qū)動(dòng)另一個(gè)UI
元素值
(2)與普通的操作系統(tǒng)驅(qū)動(dòng)程序一樣避除,如果出現(xiàn)序列錯(cuò)誤,應(yīng)用程序?qū)⑼V鬼憫?yīng)用戶輸入胸嘁。
(3)在主線程上觀察到這些元素也是極其重要的瓶摆,因?yàn)?code>UI元素和應(yīng)用程序邏輯通常不是線程安全的。
(4)此外性宏,使用構(gòu)建Driver
的可觀察的序列群井,它是共享狀態(tài)變化。
5.ControlProperty
(1)ControlProperty
是專門用來描述 UI 控件屬性毫胜,擁有該類型的屬性都是被觀察者(Observable
)书斜。
(2)ControlProperty
具有以下特征:
- 不會(huì)產(chǎn)生
error
事件 - 一定在
MainScheduler
訂閱(主線程訂閱) - 一定在
MainScheduler
監(jiān)聽(主線程監(jiān)聽) - 共享狀態(tài)變化
6.ControlEvent
基本介紹
(1)ControlEvent
是專門用于描述 UI 所產(chǎn)生的事件,擁有該類型的屬性都是被觀察者(Observable)
酵使。
(2)ControlEvent
和 ControlProperty
一樣荐吉,都具有以下特征:
- 不會(huì)產(chǎn)生
error
事件 - 一定在
MainScheduler
訂閱(主線程訂閱) - 一定在
MainScheduler
監(jiān)聽(主線程監(jiān)聽) - 共享狀態(tài)變化