swift-oc混编分享3-UrlRouter跳转中心

本文介绍了如何在iOS项目中通过URL路由实现页面的统一管理,包括内部和外部跳转,参数传递,回调处理,以及URL解析。通过创建一个路由中心,可以简化代码,减少模块间的耦合,提高开发效率。文章提供了具体的实现代码,包括页面注册、寻址、跳转方式控制、外部URL解析和事件回调的处理。

软件环境:Xcode 13.2、swift 5
创建时间:2022年 03月18日
更新时间:2023年10月17日
适用范围:iOS项目

这篇文章都说了什么

  1. 在iOS中,如何通过URL跳转到指定的页面,并传递一些参数
  2. 源码分享(swift),快速在你的项目中搭建跳转中心

场景:

        1、外部跳转很多,代码堆积。产品或者业务稍微丰富一点的时候,我们可能会借助推送来提高用户处理问题的及时性。所以,通过推送的消息很可能跳转好多页面,有原生也有有H5,还要传递不同的参数。一般一点的处理方式可以是,通过某个参数,判断跳转到哪个页面,然后再分别取里面的各种参数,传值,跳转。这样,每增加一种消息,或者参数变更,都要把控制跳转的代码做一次修改,一大堆if\else。

        2、内部模块之间依赖比较强,相互引用。项目大了,如果要拆分开,很难做到。

        3、不同场景下跳转逻辑不同(push/present),不同场景下跳入页面,关闭动作不同(pop/dismiss)

        通过本文的router,可以统一管理页面的跳转,降低页面跳转的维护成本,模块之间没有强耦合。接下来我们就围绕着适配这些场景来展开

1)外部跳转:如推送跳转、H5打开原生、其他app调起并跳转指定页面
2)内部跳转:模块解耦(模块间不强依赖,可单独存活)
3)支持回调,解决页面反向传值的问题


原理概览

还是先上一张图,整体看一下

即,主要分为2个子分支

  1. 如果是内部的一些跳转,我们就直接使用path找到对应的控制器,然后传参,跳转;
  2. 如果是外部过来的,比如推送,那我们就先解析跳转地址(URL),获取到path、query,然后走内部跳转的逻辑。如果要对外部跳转做鉴权,可以在解析url的时候,加一些规则、验证签名、或者配置可跳转的白名单等

具体介绍

1、页面注册

// 我们可以给routerHelp做一个单例,然后实例一个可变字典,存储所有的路由,类似以下结构

open class HRouterHelper: NSObject {
    
    @objc static let shared = HRouterHelper()
    
    // 注意,swift的类名其实是项目名.类名
    let mapper = NSMutableDictionary.init(dictionary: [
        "app/webView": "project.SWWebViewController",
        "app/404": "project.SW404ViewController",
        "ord
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值