[前言]
大家好, 写作是为了和读者沟通交流, 欢迎各位开发者一起了解 WisdomRouterKit SDK 的功能.
当然本期 WisdomRouterKit SDK 又添加了新的强大功能.
[提问]
1: 首先 WisdomRouterKit SDK 是一个什么样的框架?
答: WisdomRouterKit 是一个 UIViewController 与 UIViewController 之间数据传递的框架.
一般两个 UIViewController 之间的数据传递, 我们都需要创建对应类型的 UIViewController 对象, 然后对其可读可写的属性进行调用赋值,
来完成他们之间的数据传递, 这就是 WisdomRouterKit 的主要功能.
WisdomRouterKit 的功能特色, 无需我们手动去创建对于类型的 UIViewController, 就能在 UIViewController 跳转之前完成数据传递,
其中支持传递的数据类型包括: 基本数据 和 Model 模型对象, 还有 闭包 和 UI 控件对象.
[案例] :
2: 什么样的 iOS 项目需要用到 WisdomRouterKit 框架?
答: 在一般的项目中, 目标 UIViewController 都可通过类来创建后, 可简单的实现属性传递.
但如果是组件化架构项目, 在跨组件调用时, 我们为了减小功能之间的依赖, UIViewController 之间的属性传递实现就很不方便了,
此时如果用 WisdomRouterKit 框架来实现跨组件之间的数据传递就会非常轻松, 可以说 WisdomRouterKit 为组件化而生.
3:WisdomRouterKitSDK 在 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 讨论.
来源: https://www.cnblogs.com/tangjianfeng/p/11638443.html