ReactorKit架構(gòu)

  • ReactorKit 是一個輕量的響應(yīng)式編程框架。它結(jié)合了 Flux 和響應(yīng)式編程。用戶行為和頁面狀態(tài)都是通過序列相互傳遞。同時這些序列都是單向的:

    • 頁面(View)只能發(fā)出用戶行為。
    • 而反應(yīng)器(Reactor)只能發(fā)出狀態(tài)
  • 整體架構(gòu)

使用 ReactorKit 架構(gòu)后代碼根據(jù)職能分為 View(視圖)和 Reactor(響應(yīng)器)兩部分:

  • View 是用戶直接操作的層級,我們通過監(jiān)測用戶在 View 上的行為,轉(zhuǎn)化成 Action 反饋給 Reactor。
  • Reactor 處理之后又把響應(yīng)狀態(tài) State 傳遞給 View 層,View 這邊顯示最終的傳遞的狀態(tài)。

簡單來說就是 View 層只發(fā)出行為,而 Reactor 只發(fā)出狀態(tài),相互把對方所需要的東西傳遞給對方,構(gòu)成一條響應(yīng)式的序列。

  • Reactor 代碼結(jié)構(gòu)

  • Reactor 是與 UI 相互獨立的一層,它的作用就是將業(yè)務(wù)邏輯從 View 中抽離。也就是說每一個 View 都有對應(yīng)的 Reactor ,并且將所有的邏輯代理都較給 Reactor(Reactor 接收到 View 層發(fā)出的 Action,然后通過內(nèi)部操作,將 Action 轉(zhuǎn)換為 State。)

  • 定義一個 Reactor 需要遵守 Reactor 協(xié)議,該協(xié)議定義了如下內(nèi)容:
    四個響應(yīng)屬性:Action、Mutation、State、initialState。
    兩個響應(yīng)方法:mutate()、reduce()

  • 這些響應(yīng)屬性和響應(yīng)方法的作用,以及相互關(guān)系如下:

    • Action:描述用戶行為
    • Mutation:描述狀態(tài)變更( 它可以看作是 Action 到 State 的橋梁)
    • State:描述當(dāng)前狀態(tài)
    • initialState:描述初始化狀態(tài)
    • mutate():處理 Action 執(zhí)行一些業(yè)務(wù)邏輯,并轉(zhuǎn)換為 Mutation。
    • reduce(): 通過舊的 State 以及 Mutation 創(chuàng)建一個新的 State。
  • View 代碼結(jié)構(gòu)

  • View 為數(shù)據(jù)展示層,不管是 UIViewController 還是 UIView 都可以看作是 View。View 主要負(fù)責(zé)發(fā)出 Action,同時將 State 綁定到 UI 組件上。

  • 定義一個 View 只需要讓它遵循 ReactorKit 的 View 或 StoryboardView 協(xié)議即可:

    • 如果 ViewController 是純代碼開發(fā)的:則其遵守 View 協(xié)議。
    • 如果 ViewController 是 Storyboard 開發(fā)的:則其遵守 StoryboardView 協(xié)議。
  • View 中需要定義如下內(nèi)容:

    • disposeBag 屬性:協(xié)議屬性。當(dāng) View 的 reactor 變化時,之前的 disposeBag 會自動 disposed。
    • bind(reactor:) 方法:實現(xiàn)用戶輸入綁定和狀態(tài)輸出綁定。
  • 協(xié)議中的 bind() 方法不需要我們手動去調(diào)用。遵循 View 協(xié)的類將自動獲得一個 reactor 屬性。當(dāng) View 的 reactor 屬性被設(shè)置時,bind() 方法就會被自動調(diào)用。而 reactor 屬性的設(shè)置又分兩種情況:

    • 純代碼開發(fā)的 ViewController 則在其創(chuàng)建實例對象后,直接注入 reactor:
    • 使用 Storyboard 的 ViewController 則需要在其內(nèi)部的 viewDidLoad() 方法中設(shè)置 reactor

參考文章:Swift - RxSwift的使用詳解72(ReactorKit架構(gòu)1:安裝配置、基本用法)
Swift - RxSwift的使用詳解73(ReactorKit架構(gòu)2:一個用戶注冊樣例)
Swift - RxSwift的使用詳解74(ReactorKit架構(gòu)3:GitHub資源搜索樣例)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容