RxSwift學習重點整理

RxSwift學習重點:

不可忘記的前提:

  • 事件是在哪一條thread上執行(ex: main thread or background thread)
  • 物件的生命週期(i.e Observable/Observer的生命週期)
  • 效能
  • 使用的記憶體控管

RxSwift好處:

  • 運用function programming方式,解決code過於分散等問題,讓程式碼好維護(p.s. RxSwift拿去跟Target-action/Closure/Delegate相比)
  • 呼叫update UI的code永遠需要nested在asynchronous action內的問題 (p.s. KVO, Swift的didSet也有解決這個問圖)
  • 解決asynchronous action之間有Dependency時,都會需要nested

RxSwfit達成上述好處的實作概念:

  • 透過抽象化asynchronous action,包成function programming的形式讓開發者使用

RxSwift正確用法的抽象概念:

  • 確保「訂閱/與訂閱物件的生命週期」能被預期(i.e. 知道何時生成/銷毀)
  • 妥善運用compound operator(例如: combineLatest/zip、flatMap vs flatMapLatest、distinctUntilChanged、……),知道其差別與何時使用

判斷工程師對RxSwift熟練的程度:

  1. 會用RxSwift完成功能
  2. 會區分RxSwift和Target-action/Closure/Delegate的差別
  3. 了解如何妥善運用RxSwift,而不是一些可以用基本data structure(ex: Array、Dictionary……)的地方,也不自覺得使用RxSwift
  4. 了解RxSwift比較複雜的operator且能說出類似operator的差別與何時使用
  5. 會管控RxSwift的訂閱生命週期與Observable和Observer是在哪個thread上執行
  6. 有辦法運用RxSwift達成MVVM architecture(p.s. 達成Decouple UI和ViewModel、UI和ViewModel和Service的關係)
  7. 能把上面整理的RxSwift重點自己講出來,且「能上機實作出來」
  8. 不僅(7)能達成,也有應用於大型系統架構的實務經驗(ex: 一萬行code及能畫出UML class diagrams,並說明運用RxSwift後,達成什麼事,有哪些地方/原則要注意)

Backpressure feature of RxJava(p.s. RxSwift doesn’t have this feature)

https://github.com/ReactiveX/RxJava/wiki/Backpressure

Ref:
https://beeth0ven.github.io/RxSwift-Chinese-Documentation/