來聊聊RxSwift的核心
前言
繼上一篇RxSwift的概念基本描述,稍微回味一下就是:
觀察者模式+疊代器模式+函數式編程
知道上述的這些概念以後,慢慢走到實作,我們可能可以漸漸的猜想Code會長怎麼樣。這篇會繼續的再挖深一點,聊聊所謂的「序列」。
和用OOP(物件導向)Code的邏輯比較不一樣的是,以往我對於寫Code的事件發生其實可能只有很單純的寫一顆button,然後用`@objc func`去觸發在這個button按下後的事件,所以,對於一件「事件」的發生,可能只是發散的,不經過管理的。
但其實就以Button來觸發事件去描述可能跟「事件序列」的概念差遠了,接下來會實作一下所謂的RxSwift的事件列。
事件列
來描述一下事件列你會想到什麼好了,在RxSwift裡面經常描述事件列的方式就是用下面這種圖:

從左而右來說,事件先會發生1,再發生2,再發生3。
所以,如果我現在要創建一個事件,其實就可以用下面的方式去表達一個事件列:
而我這次要做的事情有三個:
- 吃早餐
- 寫Code
- 健身

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

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

哦?現在Print出了這個事件列了,我們可以看到具體的事件列在訂閱之後是怎麼被一個一個執行的:
- 先把1、2、3執行完
- 然後print出completed
- 然後是執行disposedBag
那麼,你可能會問,為什麼會有.onError、.onCompleted呢?還有disposedBag到底是什麼東西?
先來講講.onError,如果今天你的事件列是向某個地方要資料回來,那你可能會遇到請求成功、請求失敗之類的邏輯需要處理,那麼如果你順利的完成了請求,.onCompleted可能就會是你的在事件訂閱後得到的結果,如果失敗了,就會執行.onError,但這些前提都是要看事件的設計者怎麼去設計事件的發生邏輯。
DisposedBag?
玩RxSwift最重要的一件事情,大概就是資源回收了,我們在現階段可能先知道DisposedBag是資源回收機制,**調用 dispose 方法後,訂閱被取消,並且内部資源都會被釋放**。
而且dispose方法是一個必要的事情,如果內部資源沒有被回收,可能就會發生Memory leak。
之後可能會額外的花一個章節來講講DisposedBag
是不是還有很多不同類型的序列?
對,超多。
接下來會描述的特徵序列大概還有下面幾種:
- Single
- Completable
- Maybe
- Driver
- Signal
- ControlEvent
所以,接下來這些序列的使用會在下面的章節一一的做描述。