傳說中的RxSwift#3[監聽序列:Single、Completable、Maybe]

影山小麥機
Nov 18, 2022

監聽序列:Single、Completable、Maybe

前言

在上一篇我們介紹了怎麼創建一個基本的事件序列,大致上提到了如何創建一個事件列、如何訂閱一個事件列、如何設置事件順序以及最後的回收機制。最後,我們提到了監聽序列其實還有很多種可以探討,這篇將會從六種中,分兩篇去探討,前三種會是Single、Completable、Maybe。

1. Single

我覺得你可以把它想像成Observable的簡單版,它雖然不像是Observable那樣可以發出許多的元素,但它的使用效果其實是這樣:

發出一個元素,又或者是一個error事件

而且,不會有所謂的共享附加作用(這個我們稍晚一些時間會提到)

那,要怎麼創建一個Single呢?還有它通常適用什麼情境呢?

RxSwift中文文檔中有一個例子是這樣:

在下面的情境中,Single其實比較適用於API的請求,因為它會回傳資料,又或者是回傳一個error的事件。

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

2. Completable

也是作為Observable的簡單版,它的作用跟Single有點類似,但還是有本質的差異:

  1. 能發出零個事件
  2. 發出Completed或者erro事件
  3. 同樣不會有共享附加作用

Single如果適用的情境是可以在執行後返回一個值,那麼Completable的作用就不是那種在意需要返回一個值的設定,所以適用情境會是那種:

我只希望這個任務完成,但我不需要返回值。

但我得知道這個任務完成與否

所以,基於本質期待的不一樣,Completable的執行可能會是下面這個樣子:

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

3. Maybe

Maybe正如它的命名,它也許是產生一個元素,或是一個completed事件,又或是一個error事件。

所以,特點就是:

  1. 元素、completed、error事件三選一產生
  2. 不會有共享附加作用

聽起來實在有點曖昧,但或許這也是這個事件序列好用之處。

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

小結

  1. Single使用的情境可能會是有回傳值的狀況:它能回傳一個值或是回傳error事件
  2. Completable屬於那種我只需要完成任務或否的情境:它只能回傳completed或error事件
  3. Maybe是曖昧鬼,它可以回傳:一個元素或是一個completed事件或是一個error事件

三者都有一個共通點,就是三個都不會有共享作用,Well,我們說到這裡,可能到時需要花一點時間理解什麼叫做共享作用,不過在此我們可能只要先知道它們三者就是有這個特性就好,晚些時候再來談談。

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

影山小麥機
影山小麥機

Written by 影山小麥機

本職為Mobile工程師,熱愛分享視野,也樂意站在ChatGPT的肩膀上。訂閱小麥機,收割技術、職涯、人生的難題。

No responses yet

Write a response