傳說中的RxSwift#2 [RxSwift的心臟:事件列]

影山小麥機
Nov 12, 2022

來聊聊RxSwift的核心

前言

繼上一篇RxSwift的概念基本描述,稍微回味一下就是:

觀察者模式+疊代器模式+函數式編程

知道上述的這些概念以後,慢慢走到實作,我們可能可以漸漸的猜想Code會長怎麼樣。這篇會繼續的再挖深一點,聊聊所謂的「序列」。

和用OOP(物件導向)Code的邏輯比較不一樣的是,以往我對於寫Code的事件發生其實可能只有很單純的寫一顆button,然後用`@objc func`去觸發在這個button按下後的事件,所以,對於一件「事件」的發生,可能只是發散的,不經過管理的。

但其實就以Button來觸發事件去描述可能跟「事件序列」的概念差遠了,接下來會實作一下所謂的RxSwift的事件列。

事件列

來描述一下事件列你會想到什麼好了,在RxSwift裡面經常描述事件列的方式就是用下面這種圖:

從左而右來說,事件先會發生1,再發生2,再發生3。

所以,如果我現在要創建一個事件,其實就可以用下面的方式去表達一個事件列:
而我這次要做的事情有三個:

  1. 吃早餐
  2. 寫Code
  3. 健身

於是,我創建完一個事件列了,但你只是創建完一個概念性的事件列,我們接下來實際來訂閱一下這個事件列吧!

我們在這裡用.subscribe去做訂閱的動作,實際訂閱了之後,我們來按下run。那接下來我們來實際看看consoleLog:

哦?現在Print出了這個事件列了,我們可以看到具體的事件列在訂閱之後是怎麼被一個一個執行的:

  1. 先把1、2、3執行完
  2. 然後print出completed
  3. 然後是執行disposedBag

那麼,你可能會問,為什麼會有.onError、.onCompleted呢?還有disposedBag到底是什麼東西?

先來講講.onError,如果今天你的事件列是向某個地方要資料回來,那你可能會遇到請求成功、請求失敗之類的邏輯需要處理,那麼如果你順利的完成了請求,.onCompleted可能就會是你的在事件訂閱後得到的結果,如果失敗了,就會執行.onError,但這些前提都是要看事件的設計者怎麼去設計事件的發生邏輯。

DisposedBag?

玩RxSwift最重要的一件事情,大概就是資源回收了,我們在現階段可能先知道DisposedBag是資源回收機制,**調用 dispose 方法後,訂閱被取消,並且内部資源都會被釋放**。

而且dispose方法是一個必要的事情,如果內部資源沒有被回收,可能就會發生Memory leak。

之後可能會額外的花一個章節來講講DisposedBag

是不是還有很多不同類型的序列?

對,超多。

接下來會描述的特徵序列大概還有下面幾種:

  1. Single
  2. Completable
  3. Maybe
  4. Driver
  5. Signal
  6. ControlEvent

所以,接下來這些序列的使用會在下面的章節一一的做描述。

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