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讨论。

iOS 组件化路由框架 WisdomRouterKit 的应用的更多相关文章
- iOS 组件化 —— 路由设计思路分析
原文 前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高.为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM,VIPER等复杂架构.更换适合业 ...
- iOS组件化实现方案
作者原文iOS组件化 - 路由架构从0到1实战 合伙呀 1.CTMediator作为路由中间件 2.基础UI组件以pod形式引入,并且能够独立运行调试 3.基础工具组件以pod形式引入,并且能够独立 ...
- 使用CocoaPods创建自己的私有库-iOS组件化第一步
目前iOS组件化常用的解决方案是Pod+路由+持续集成,通常架构设计完成后第一步就是将原来工程里的模块按照架构图分解为一个个独立的pod工程(组件),今天我们就来看看如何创建一个Pod私有库. 新建: ...
- iOS 组件化
iOS 组件化介绍 随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间 ...
- iOS 从零到一搭建组件化项目框架
随着公司业务需求的不断迭代发展,工程的代码量和业务逻辑也越来越多,原始的开发模式和架构已经无法满足我们的业务发展速度了,这时我们就需要将原始项目进行一次重构大手术了.这时我们应该很清晰这次手术的动刀口 ...
- iOS组件化思路 <转>
随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间的代码耦合,为了更好 ...
- iOS组件化思路-大神博客研读和思考
一.大神博客研读 随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间的 ...
- iOS组件化开发入门 —— 提交自己的私有库
前言:本人也是初次接触组件化开发,感觉现有的资料太繁杂,就简单整理了一下,在此跟大家分享一些入手的经验,主要就是描述cocoapods的私有库封装和提交.组件化开发是个大的议题,涉及到架构思路.设计模 ...
- Category 特性在 iOS 组件化中的应用与管控
背景 iOS Category功能简介 Category 是 Objective-C 2.0之后添加的语言特性. Category 就是对装饰模式的一种具体实现.它的主要作用是在不改变原有类的前提下, ...
随机推荐
- 2019nc#5
题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A digits 2 点击查看 1017/2384 通过 B generator 1 点击查看 567/3692 通过 C generato ...
- 模板汇总——LCT
link-cut tree #define lch(x) tr[x].son[0] #define rch(x) tr[x].son[1] ; struct Node{ int rev, rt; ], ...
- 单细胞转录组测序数据的可变剪接(alternative splicing)分析方法总结
可变剪接(alternative splicing),在真核生物中是一种非常基本的生物学事件.即基因转录后,先产生初始RNA或称作RNA前体,然后再通过可变剪接方式,选择性的把不同的外显子进行重连,从 ...
- java中存储机制堆栈。
一.java的六种存储地址及解释 1) 寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不 ...
- linux常用命令二
linux常用命令一 常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all ...
- Spring Cloud同步场景分布式事务怎样做?试试Seata
一.概述 在微服务架构下,虽然我们会尽量避免分布式事务,但是只要业务复杂的情况下这是一个绕不开的问题,如何保证业务数据一致性呢?本文主要介绍同步场景下使用Seata的AT模式来解决一致性问题. Sea ...
- 二分练习题3 查找小于x的最大元素 题解
题目描述 现在告诉你一个长度为 \(n\) 的有序数组 \(a_1, a_2, ..., a_n\) ,以及 \(q\) 次询问,每次询问会给你一个数 \(x\) ,对于每次询问,你需要输出数组 \( ...
- Hadoop&Hbase 双机热备--Pacemaker&DRBD部署
相关文章 DRBD的介绍请参考http://blog.csdn.net/rzhzhz/article/details/7103772 DRBD的部署请参考http://blog.csdn.ne ...
- 从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念
作者| 阿里巴巴资深技术专家.CNCF 9个 TCO 之一 李响 一.什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台.Kubernetes 这个 ...
- 《即时消息技术剖析与实战》学习笔记7——IM系统的消息未读
一.什么是消息未读 消息未读包括会话未读和总未读.前者指的是当前用户和某一聊天方的未读消息数,后者指的是当前用户的所有未读消息数,也就是所有会话未读的和.比如用户A收到用户B的2条消息,还收到用户C的 ...