監聽序列:Single、Completable、Maybe
前言
在上一篇我們介紹了怎麼創建一個基本的事件序列,大致上提到了如何創建一個事件列、如何訂閱一個事件列、如何設置事件順序以及最後的回收機制。最後,我們提到了監聽序列其實還有很多種可以探討,這篇將會從六種中,分兩篇去探討,前三種會是Single、Completable、Maybe。
1. Single
我覺得你可以把它想像成Observable的簡單版,它雖然不像是Observable那樣可以發出許多的元素,但它的使用效果其實是這樣:
發出一個元素,又或者是一個error事件
而且,不會有所謂的共享附加作用(這個我們稍晚一些時間會提到)
那,要怎麼創建一個Single呢?還有它通常適用什麼情境呢?
在RxSwift中文文檔中有一個例子是這樣:
在下面的情境中,Single其實比較適用於API的請求,因為它會回傳資料,又或者是回傳一個error的事件。

所以,接下來就是訂閱Single這個序列,然後執行它。

2. Completable
也是作為Observable的簡單版,它的作用跟Single有點類似,但還是有本質的差異:
- 能發出零個事件
- 發出Completed或者erro事件
- 同樣不會有共享附加作用
Single如果適用的情境是可以在執行後返回一個值,那麼Completable的作用就不是那種在意需要返回一個值的設定,所以適用情境會是那種:
我只希望這個任務完成,但我不需要返回值。
但我得知道這個任務完成與否
所以,基於本質期待的不一樣,Completable的執行可能會是下面這個樣子:

我們在下面這個訂閱中,只會看到它就是會執行觀察序列完成這次的事情的執行,或是失敗的話,執行的程式碼:

3. Maybe
Maybe正如它的命名,它也許是產生一個元素,或是一個completed事件,又或是一個error事件。
所以,特點就是:
- 元素、completed、error事件三選一產生
- 不會有共享附加作用
聽起來實在有點曖昧,但或許這也是這個事件序列好用之處。

以下的訂閱就會處理了只回傳completed、Error或是事件序列的元素產生

小結
- Single使用的情境可能會是有回傳值的狀況:它能回傳一個值或是回傳error事件。
- Completable屬於那種我只需要完成任務或否的情境:它只能回傳completed或error事件。
- Maybe是曖昧鬼,它可以回傳:一個元素或是一個completed事件或是一個error事件。
三者都有一個共通點,就是三個都不會有共享作用,Well,我們說到這裡,可能到時需要花一點時間理解什麼叫做共享作用,不過在此我們可能只要先知道它們三者就是有這個特性就好,晚些時候再來談談。