Mon, Apr 25, 2022 9:30 AM
RxSwfit
MVVM
假設現在有一簡單註冊需求:
帳號
最少 6
個字。密碼
最少 8
個字。驗證密碼
需與密碼
完全相同。註冊成功
,反之註冊失敗
。現在在腦裡假想一下,該怎麼實作以上需求。
沒有意外通常都是實作 UITextFieldDelegate 判斷當前的 textField 後再處理需求。
完整程式碼參閱 GitHub tag: v1。
tag: v2 為 viewModel 優化,將 input、output 拆分,使用上會更清楚。
在開始談論 RxSwift
之前我們先理解一下 MVVM (Model–view–viewmodel),詳細原理請直接參照維基百科。
用 MVVM 的好處是什麼?
RxSwift 就是 ReactiveX 的 Swift 版本,是一個函式響應式框架,遵循 Functional Reactive Programming(FRP) 的設計規範,它把事件封裝成訊號流,並採用觀察者模式來實現。
這兩個名詞是所有 RxSwift 初學者必定會接觸的東西同時這也是貫穿整個 RxSwift 的重點。
當 Observable
送出訊號時,Observer
收到並做相對應處理。
舉例:當嬰兒哭泣,爸媽立刻動身探視。
BehaviorSubject 去掉終止事件
onError
或onCompleted
。
初始的時候可以帶預設值,會持有 value
;訂閱的時候就會送出訊號。
PublishSubject 去掉終止事件
onError
或onCompleted
。
初始的時候沒有帶預設值,不會持有 value
;訂閱的時候不會送出訊號,被觸發才會。
接收 Observable
的 Event
訊號,進行後續處理。
跟隨生命週期控制 訂閱事件
的釋放。
因 BehaviorRelay
、PublishRelay
本身為容器非變數,所以正確應寫 let
而非 var
。
請詳閱 RxSwift 中文文檔。
以上做法是非常淺入的寫法。
只需要實作幾個環節就能完成本文一開始的簡單需求,以上全部僅為個人的簡單見解如有錯誤請不吝指教。
希望可以一起進步。