JLRoutes 源码解读以及基于JLRoutes库的 路由设计

JLRoutes 的实现原理

JLRoutes是通过解析URL不同的参数,并用block回调的方式处理
页面间的传值以及跳转。其本质就是在程序中注册一个全局的字典,
key是URL scheme,value是一个JLRoutes对象,该对象包含一个
数组,该数组中包含了多个 参数为字典的block回调。跳转的时候
双层遍历去匹配block回调

注册流程

调用 addRoute:handler: 方法注册 url scheme,保存/取出每个 scheme 对应的 routes controller 对象(以 key-value 形式保存的);注册 url pattern,按优先级将每个 pattern 对应的 JLRRouteDefinition(封装 pattern、priority、回调 block 等数据)通过插入排序的方式保存到数组中,这里一个 pattern 可能对应一个或者多个 JLRRouteDefinition。
如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解析 URL 流程

调用 routeURL: 方法唤起 URL时,取出 scheme 对应的 JLRoute,生成 JLRRouteRequest,然后遍历JLRoute的数组里面的 JLRRouteDefinition, JLRRouteDefinition 会和 request 进行匹配并生成一个 JLRRouteResponse 对象,如果匹配上了,就回调 block,并回传参数。

下面使用源码解读 解析URL流程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用场景

deep link:通过 Custom URL Scheme 由外部跳转到 app,比如推送跳转,app 间跳转。
app 内部路由跳转:使用中介者模式对 controller 进行解耦。

使用方法

启动app时注册

在这里插入图片描述

跳转

在这里插入图片描述

跳转传参以及回调

在这里插入图片描述
处理回调
在这里插入图片描述

路由跳转设计

维护一个全局的字典,key是URL的某个字段(通常用host,当然
也可以也定其他字段),value是 对应VC的类型。
这样我们就可以不需要对每个vc 都注册一个路由,
达到了重用的效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值