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