iOS 组件化路由框架 WisdomRouterKit 的应用
【前言】
【提问】
1:首先WisdomRouterKitSDK 是一个什么样的框架?
答:WisdomRouterKit是一个UIViewController 与UIViewController之间数据传递的框架。
来完成他们之间的数据传递,这就是WisdomRouterKit的主要功能。
其中支持传递的数据类型包括:基本数据 和 Model 模型对象,还有 闭包 和 UI控件对象。
【案例】:
2: 什么样的 iOS 项目需要用到WisdomRouterKit框架?
答:在一般的项目中,目标UIViewController 都可通过类来创建后,可简单的实现属性传递。
此时如果用 WisdomRouterKit框架来实现跨组件之间的数据传递就会非常轻松,可以说WisdomRouterKit为组件化而生。
3:WisdomRouterKitSDK 在iOS移动开发中能为我们解决哪些问题,实现哪些功能,有哪些优势?
答:在组件化架构项目中,为了将组件之间的依赖减小到最低,我们都会选择使用GitHub上的第三方Router框架。
(1)第一种方案,用协议实现:通过注册协议关联对象,协议实现方案是一个不错的选择,目前我们项目也是使用的协议Router。
但是,协议的使用缺点也很明显,使用过程是很会令开发者头疼。每当有属性或者方法改动及调整时,都需要重新发布 pods 新版本,并更新最新此组件的协议版本,
有多少地方进行组件交互,就需要多少协议对象,并进行注册协,随着需求迭代,你会发现协议库越来越庞大,且无发瘦身。
无发瘦身的原因是多个项目用到功能不一样,导致协议版本需求也不能一致,协议库需要在兼容老功能同时,为新功能写重复代码。
(2)第二种方案,用闭包实现:闭包实现方案也是一个不错的选择。
闭包实现方案的缺点也很明显:使用字典装载参数,传递参数,对功能扩张性太低,比如多模型对象和多闭包的数据传递。
【简介】
1:一个强大的iOS路由器SDK,专门处理组件化各模块之间的数据传递。
2:WisdomRouterKit 可帮你完成跨组件页面之间的属性和闭包传值,并且支持属性集合和闭包集合传值,还支持无痕获取全局单列对象,无需各个组件之间进行任何引用,
也无需定义公共协议进行各组件之间关联,真正做到完全解偶,真正做到顶天立地。
3:对于项目将来功能或者业务代码快速的扩展叠加,无需人员维护,无需维护成本。
4:API的优势是调用方便,使用灵活,实现了简洁的追加注册调用,只需要数行注册代码,我们就可以展开接下来的Router功能。
5:WisdomRouterKit SDK是纯swift代码编写,保证了SDK高效性能,支持属性赋值过程中的异常数据抓取,能帮助开发快速定位问题。
6:OC项目的小伙伴们也不要愁,WisdomRouterKit SDK完全支持OC项目调用,尽管pod集成就是了。
【集成】
【基本功能-传值】
【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
【进阶功能-获取全局单列】
1:继承 WisdomRouterModel。
2:实现声明单列对象。
3:实现WisdomRouterShareProtocol,并实现 share() 方法,返回值为声明的单列对象。
1:shareName: 指定组件的单列Model对象 名称。
2:targetSubstituteClass: 用来作为获取组件单列Model对象的替身类,一般与组件单列Model对象同属性即可。
3:最后通过 as!强解包生成 targetSubstituteClass 对应类型的Model对象。如果shareName错误或者非单列对象,会生成一个无属性值的对象。
【Router注册】