SwiftUI 和 Combine 編程


SwiftUI 和 Combine 編程

  • SwiftUI

響應式編程。

基於 UIKit、Core Graphics、Core Text 等系統框架封裝了完整而優美的 DSL。

Combine 響應式編程框架和函數式編程思想直接驅動了 SwiftUI 中的數據流向。

提供了一套通用的語法和基礎數據類型,抹平 Apple 自家平台差異性,降低同生態跨端難度。

拋棄 ViewController 概念。

在 API 層面上,有 RAC 鏈式調用的影子和 Combine 的強依賴實現。

  • Combine

SwiftUI 中處理數據的本體,響應式框架。

提供給 SwiftUI 中與數據源雙向綁定的能力。

數據流式處理「鏈式」調用。與 SwiftUI 的「鏈式」組織 UI 不同,SwiftUI 是通過鏈式調用構造出一個確定的單一對象(語法糖),但 Combine 的每一次鏈式調用都會生成一個新的源數據。

  • 鏈式調用

「鏈式調用的過程」被稱為是 SwiftUI 中 View 的 modifier,每個 modifier 的調用結束后,返回給下一個 modifier 有兩種情況:第一種情況只是對 View(如 Text)的 font 等與布局無關的方法,返回給下一個 modifier 相同類型的 View;第二種情況對 View 的布局產生了修改,如調用了 padding 等方法,返回給下一個鏈式調用的 modifier 是一個重新包裝過的全新 View。

SwiftUI 與 Combine 之間的聯合關系,經常在思考如何合理有效的組織各個數據源去控制組件的交互。其中一定要死死握住的就是「單一數據源」,把能夠引發某個組件產生某種行為的源頭限制在同一個數據對象本身。

其中,最為常用的三個狀態修飾符為:

@State;

@Binding;

@ObservedObject。

Combine 中的三大支柱 Publisher,負責發布事件;

Operator,負責轉換事件和數據;

Subscribe,負責訂閱事件。

這三者都是協議,且都是 @propertyWrapper 的具體應用。

Publisher

Publisher 最主要的工作其實有兩個:發布新的事件及其數據,以及准備好被 Subscriber 訂閱。Output 及 Failure 定義了某個 Publisher 所發布的值的類型,以及可能產生的錯誤 的類型。

Publisher 可以發布三種事件:

類型為 Output 的新值:這代表事件流中出現了新的值;

類型為 Failure 的錯誤:這代表事件流中發生了問題,事件流到此終止;

完成事件:表示事件流中所有的元素都已經發布結束,事件流到此終止。

Publisher 的這三種事件不是必須的,也就是說,Publisher 可能只發一個或者一個都不發,也有可能一直在發,永遠不會停止,這就是無限事件流,還有可能通過發出 failure 或者 finished 的事件表明不會再發出新的事件,這是有限事件流。

Operator

每個 Operator 的行為模式都一樣:它們使用上游 Publisher 所發布的數據作為輸入,以此產生的新的數據,然后自身成為新的 Publisher,並將這些新的數據作為輸出,發布給下游,這樣相當於得到了一個響應式的 Publisher 鏈條。

當鏈條最上端的 Publisher 發布某個事件后,鏈條中的各個 Operator 對事件和數據進行處理。在鏈條的末端我們希望最終能得到可以直接驅動 UI 狀態的事件和數據。這樣,終端的消費者可以直接使用這些准備好的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM