1. 程式人生 > >iOS 元件化路由框架 WisdomRouterKit 的應用

iOS 元件化路由框架 WisdomRouterKit 的應用

【前言】

  • 大家好,寫作是為了和讀者溝通交流,歡迎各位開發者一起了解 WisdomRouterKit SDK 的功能。
  • 關於 iOS 元件化路由方案框架: WisdomRouterKit 的功能介紹,之前在簡書上有寫過相關文章,但是發現閱讀量比較低,所以今天決定整理一下 WisdomRouterKit 功能介紹和使用方案,重新更新下文章。
  • 當然本期 WisdomRouterKit SDK 又添加了新的強大功能。

【提問】

1:首先 WisdomRouterKit SDK 是一個什麼樣的框架?

答:WisdomRouterKit 是一個 UIViewController 與 UIViewController之間資料傳遞的框架。

  • 一般兩個UIViewController之間的資料傳遞,我們都需要建立對應型別的 UIViewController 物件,然後對其可讀可寫的屬性進行呼叫賦值,

     來完成他們之間的資料傳遞, 這就是 WisdomRouterKit 的主要功能。

  • WisdomRouterKit 的功能特色,無需我們手動去建立對於型別的 UIViewController,就能在 UIViewController 跳轉之前完成資料傳遞,

     其中支援傳遞的資料型別包括:基本資料 和 Model 模型物件,還有 閉包 和 UI控制元件物件。

    【案例】:

      

 

2:  什麼樣的 iOS 專案需要用到 WisdomRouterKit 框架?

答:在一般的專案中,目標 UIViewController 都可通過類來建立後,可簡單的實現屬性傳遞。

  • 但如果是元件化架構專案,在跨元件呼叫時,我們為了減小功能之間的依賴,UIViewController 之間的屬性傳遞實現就很不方便了,

        此時如果用 WisdomRouterKit 框架來實現跨元件之間的資料傳遞就會非常輕鬆,可以說 WisdomRouterKit 為元件化而生。

 

3:WisdomRouterKit SDK 在iOS移動開發中能為我們解決哪些問題,實現哪些功能,有哪些優勢?

答:在元件化架構專案中,為了將元件之間的依賴減小到最低,我們都會選擇使用GitHub上的第三方Router框架。

  • 目前GitHub上的Router框架實現方案分兩種:

    (1)第一種方案,用協議實現:通過註冊協議關聯物件,協議實現方案是一個不錯的選擇,目前我們專案也是使用的協議Router。

           但是,協議的使用缺點也很明顯,使用過程是很會令開發者頭疼。每當有屬性或者方法改動及調整時,都需要重新發布 pods 新版本,並更新最新此元件的協議版本,

           有多少地方進行元件互動,就需要多少協議物件,並進行註冊協,隨著需求迭代,你會發現協議庫越來越龐大,且無發瘦身。

           無發瘦身的原因是多個專案用到功能不一樣,導致協議版本需求也不能一致,協議庫需要在相容老功能同時,為新功能寫重複程式碼。

   (2)第二種方案,用閉包實現:閉包實現方案也是一個不錯的選擇。

           閉包實現方案的缺點也很明顯:使用字典裝載引數,傳遞引數,對功能擴張性太低,比如多模型物件和多閉包的資料傳遞。

  • 對於 WisdomRouterKit 的優點,上面兩種實現Router方案的缺點,就是它的優點。

 

【簡介】

    1:一個強大的iOS路由器SDK,專門處理元件化各模組之間的資料傳遞。

    2:WisdomRouterKit 可幫你完成跨元件頁面之間的屬性和閉包傳值,並且支援屬性集合和閉包集合傳值,還支援無痕獲取全域性單列物件,無需各個元件之間進行任何引用,

        也無需定義公共協議進行各元件之間關聯,真正做到完全解偶,真正做到頂天立地。

   3:對於專案將來功能或者業務程式碼快速的擴充套件疊加,無需人員維護,無需維護成本。

   4:API的優勢是呼叫方便,使用靈活,實現了簡潔的追加註冊呼叫,只需要數行註冊程式碼,我們就可以展開接下來的Router功能。

   5:WisdomRouterKit SDK是純swift程式碼編寫,保證了SDK高效效能,支援屬性賦值過程中的異常資料抓取,能幫助開發快速定位問題。

   6:OC專案的小夥伴們也不要愁,WisdomRouterKit SDK完全支援OC專案呼叫,儘管pod整合就是了。

 

 【整合】

  • pod 整合:pod 'WisdomRouterKit'
  • github連結:https://github.com/tangjianfengVS/WisdomRouterKit

 

【基本功能-傳值】

    【1】:無引數,無閉包,簡單路由

            

  【2】:有引數,無閉包,簡單路由

            

           注:"testSize"是"SecundViewController"的基本屬性名稱,這裡把99.99賦值給"SecundViewController"的"testSize"。

                 WisdomRouterParam 建立指定 double 型別。

   【3】:引數模型物件: testModel,簡單路由

           

          注:"testModel"是"SecundThreeViewController"的模型屬性名稱,這裡把testModel賦值給"SecundThreeViewController"的"testModel"。

                 WisdomRouterParam 建立指定 model 型別。

   【4】:引數模型物件集合: TestModel 集合,簡單路由

          

          注:"testModelList"是"ThreeViewController"的模型屬性名稱,這裡把testModelList賦值給"ThreeViewController"的"testModelList"。 

                 WisdomRouterParam 建立指定 modelList 型別。

    【5】:閉包,簡單路由

         

          注:"closure"是"FourViewController"的閉包屬性名稱,這裡把hander賦值給"FourViewController"的"closure"。 

                 WisdomRouterHander 建立指定 hander 型別。

   【6】:WisdomRouterKit 功能擴充套件

         WisdomRouterKit 功能擴充套件請看這邊文章:https://www.jianshu.com/p/5d6bd3e0505c

 

【進階功能-獲取全域性單列】

  • 全域性單列 Mode需要滿足3個條件:

         

        1:繼承 WisdomRouterModel。

        2:實現宣告單列物件。

        3:實現 WisdomRouterShareProtocol,並實現 share() 方法,返回值為宣告的單列物件。

  •  全域性單列 TestShareModel 獲取案例:

       

        1:shareName: 指定元件的單列Model物件 名稱。

        2:targetSubstituteClass: 用來作為獲取元件單列Model物件的替身類,一般與元件單列Model物件同屬性即可。

        3:最後通過 as! 強解包生成 targetSubstituteClass 對應型別的Model物件。如果shareName錯誤或者非單列物件,會生成一個無屬性值的物件。

 

【Router 註冊】

  • 按照上面使用案例,我們在使用WisdomRouterKit時,發現沒有成功。因為還需要對跨元件的UIViewController進行註冊。
  • 註冊包括3點:UIViewController的型別,和UIViewController的Mode屬性l物件和閉包屬性 。
  • 註冊API:
                      注:只註冊下控制器型別                        注:這裡註冊下控制器型別,並通過模型屬性的名關聯模型型別註冊                        注:這裡註冊下控制器型別,並通過閉包屬性的名關聯閉包註冊
  • 註冊案例:

         --- 無模型物件,無閉包

         

        1:使用 @objcMembers 修飾,表示允許執行時獲取屬性。

        2: 實現註冊協議,包括實現協議方法。

        3: 通過 register 方法進行註冊,這裡沒有引數。

        --- 一個模型物件,一個閉包

        

       注:註冊Model:通過屬性名稱和模型型別進行繫結。

             註冊閉包屬性:在使用(router呼叫)的時候,會回撥註冊閉包,註冊閉包返回對應的控制器和hander屬性,我們只需要確定控制器和handerr型別,強行解包賦值就可以了。

 

【繼承 WisdomRouterModel】

  • WisdomRouterKit 中用到的Model物件,都需要繼承WisdomRouterModel,WisdomRouterModel物件中已經賦予了動態性。繼承WisdomRouterModel後,自己建立的Model也賦予動態性。

【總結】

  • WisdomRouterModel SDK是反射機制實現一套的一套路由方案。
  • 本著為大家在開發中帶來便捷,以及建立搭建元件化專案的連線橋樑,推出的WisdomRouterModel SDK,後期SDK功能還會更加完善,敬請期待。
  • 簡書的 WisdomRouterModel 介紹請看之前寫的文章,連結:https://www.jianshu.com/p/5d6bd3e0505c
  • 如有技術問題和技術糾正,請在下面留言或者加QQ497609288討論。