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討論。

          

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章