iOS路由(MGJRouter)的实现

背景

最开始想做路由,是因为当时app中有大量与H5之间的交互,原生和H5的跳转操作比较多比较频繁,新增一个跳转又涉及到改代码发版本,为了统一iOS、安卓和H5的跳转,引入了路由。

作用

后来发现路由,还可很多作用。Router就像是个调度中心,各个模块通过路由调度其他模块,模块之间不需要相互引用,调度方式更加统一,更加自由,能够实现解耦的作用,同时也为之后的组件化开发提供了基础。

路由选择

目前github优秀的路由设计已经有很多,如JLRoutes,MGJRouter,CTMediator。

JLRoutes提供的功能比较复杂,有很多我个人用不上的功能,所以没有选择。

CTMediator更适合业务比较复杂的情况,MGJRouter的使用上更加容易上手,功能也比较简单,更加适用于页面跳转这种业务比较多的场景。所以我项目中选择了MGJRouter

JLRoutes

  1. 集成简单
  2. 可以处理各种各样的url
  3. 支持通配符
  4. 支持多个scheme
  5. 比较纯粹,不支持打开页面后的值回传。要自己再加工。

MGJRouter

  1. 代码简单易懂
  2. 功能全面
  3. 支持push值回传
  4. 支持多scheme
  5. openUrl时支持一个userInfo (造成了跟系统的不统一,多出来的参数还是可以放到url中,传对象的时候有点用)(模块内部传对象可以用,模块间的话不应该传对象,会造成耦合)

MGJRouter

MGJRouter就一个单例类,使用前需要通过注册组件,调用方通过URL调用服务方页面,通过路由表的映射关系进行关联,调用方可以传入复 杂的参数、对象等。

基本跳转主要是注册组件,调用openURl方法,传入参数即可实现。

[MGJRouter registerURLPattern:@"mgj://foo/bar" toHandler:^(NSDictionary *routerParameters) {
  NSLog(@"routerParameterUserInfo:%@", routerParameters[MGJRouterParameterUserInfo]);
}];

[MGJRouter openURL:@"mgj://foo/bar"];

使用一个类来统一管理注册的方法,再load方法中进行注册,就不会到处看到注册的代码,方便管理。

url注册管理类

很多人说没有反向传值的方法,其实和我们其他跳转一样,传参数的时候使用block即可解决。

[MGJRouter openURL:@"LWT://Test3/PushMainVC"withUserInfo:@{
  @"navigationVC" : self.navigationController,
  @"block":^(NSString * text){NSLog(@"%@",text); },
  }
      completion:nil];

代码下载

demo中有MGJRouter各个方法的使用案例,包括跳转,获取组件,正反向传参。

MGJRouter使用Demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • iOS撸一个简单路由Router的实现代码

    平常开发中用户点击头像, 进入个人主页,这看似平常的操作, 背后极有可能会牵扯到多个模块. 再如: 视频模块的播放页, 有与视频相关的音乐,点击这些音乐,需要跳转到音乐模块的播放页, 这样视频与音乐模块之间,不可避免的会产生依赖或耦合. 这个问题让人脑壳疼,相信很多朋友都这样做过,写一些代理或通知, 不停的传递事件: 有时干脆直接导入另一个模块. 因为我在公司独立开发, 顾及少一点,可以拿公司项目做实践,在尝试组件化的过程中, 了解到了路由, 对于解决上述问题, 有极大的帮助.因此我想总结并与大

  • iOS使用核心的50行代码撸一个路由组件

    使用组件化是为了解耦处理,多个模块之间通过协议进行交互.而负责解析协议,找到目的控制器,或者是返回对象给调用者的这个组件就是路由组件.本文讲解如何使用核心的50行代码实现一个路由组件. 组件化和路由 路由的实现 路由注册实现 路由使用实现 客户端的使用 一些小想法 组件化和路由 之前看过挺多的关于路由管理.路由处理的文章,常常会和组件化出现在一起,一开始不知道为何路由和组件化出现在一起,后来公司的项目中使用了路由组件(他本身也是一个组件,确切的说是一个中间人或者中介者),才突然想明白了,原来如此

  • iOS开发之拦截URL转换成本地路由模块URLRewrite详解

    本文主要给大家介绍了关于iOS拦截URL转换成本地路由模块URLRewrite的相关内容,分享出来供各位iOS开发者们参考学习,下面话不多说了,来一起看看详细的介绍: 需求场景 做过电商App的可能都遇到过这样的需求,在商场首页,各种各样动态的跳转,跳转商品详情.秒杀列表.品牌列表.搜索结果.分类结果页面等等等等.同一个位置,可能今天跳这个商品,明天跳转那个商品,运营配的就是一个web端的URL. 拦截webView里面的URL. 需求分析 拦截各种各样的URL,跳转到指定的原生页面. URL的

  • 如何在iOS上使用MVVM进行路由详解

    前言 我已经在几个项目中使用MVVM了一段时间,我真的很喜欢它的简单性.特别是,如果你像许多人一样从MVC迁移,你只需要在你的架构中增加一层ViewModel.如果您发现太多层级造成的复杂,这确实使事情变得更容易. 这是一个良好的开端,但这种简单并不总是好的.在MVVM中,您将业务逻辑移出视图控制器(VC),然后意识到它仍然很胖.视图模型(VM)现在具有业务逻辑,但是展示数据(格式化)或路由如何?他们仍然被困在VC中,我们需要将它们移出. #示例流程 假设我们正在实现登陆页面,如下所示. ##路

  • iOS 模块化之JLRoute路由示例

    JLRoutes是一个调用极少代码 , 可以很方便的处理不同URL schemes以及解析它们的参数,并通过回调block来处理URL对应的操作 , 可以用于处理复杂跳转逻辑的三方库. 1.在日常开发中 , push , present 出现在整个程序的各个地方 , 如果你想快速理清一个项目的整体逻辑 , 非常麻烦 . 大多数情况 , 你得找到代码目录 ,根据层级结构分出关系 , 然后找到对应的push位置 , 寻找下一级页面 , 如果本身项目的目录就非常乱 , 那么如果要了解一个项目的整体跳转

  • Vue+axios 实现http拦截及路由拦截实例

    现如今,每个前端对于Vue都不会陌生,Vue框架是如今最流行的前端框架之一,其势头直追react.最近我用vue做了一个项目,下面便是我从中取得的一点收获. 基于现在用vue+webpack搭建项目的文档已经有很多了,我就不再累述了. 技术栈 vue2.0 vue-router axios 拦截器 首先我们要明白设置拦截器的目的是什么,当我们需要统一处理http请求和响应时我们通过设置拦截器处理方便很多. 这个项目我引入了element ui框架,所以我是结合element中loading和me

  • iOS路由(MGJRouter)的实现

    背景 最开始想做路由,是因为当时app中有大量与H5之间的交互,原生和H5的跳转操作比较多比较频繁,新增一个跳转又涉及到改代码发版本,为了统一iOS.安卓和H5的跳转,引入了路由. 作用 后来发现路由,还可很多作用.Router就像是个调度中心,各个模块通过路由调度其他模块,模块之间不需要相互引用,调度方式更加统一,更加自由,能够实现解耦的作用,同时也为之后的组件化开发提供了基础. 路由选择 目前github优秀的路由设计已经有很多,如JLRoutes,MGJRouter,CTMediator.

  • 浅谈强大易用支持URL Rewrite的iOS路由库FFRouter

    FFRouter 是 iOS 中一个强大且易用的 URL 路由库,支持 URL Rewrite,使 APP 在发布之后也可以动态修改相关路由逻辑.基于匹配查找 URL,效率高.集成和使用都非常简单! Github链接:FFRouter 功能 具备基本的 URL 注册.Route.取消注册.打印 Log 等 支持使用通配符(*)注册 URL 支持 URL Rewrite 支持 Rewrite 时获取原 URL 参数或 URLComponents,并可对其进行URL Encode或 Decode 支

  • 记录vue做微信自定义分享的一些问题

    前言 众所周知,在使用vue做项目的时候,微信自定义分享一直是一个坑,只是ios上坑明显的多. 然后每次遇到问题都要度娘很久. 奇怪的是貌似和很多人遇到的问题一样,但是他们写的解决方案都没办法直接解决我遇到的问题. 这里就记录一下遇到过的一些坑,和解决方式. 目前项目里面,安卓和ios上面的自定义分享已经没有什么问题了. 问题及解决方式 hash模式 在微信的官方文档中,提到关于jsapi_ticket的签名算法中,生成签名的时候,当前网页的URL,不包含#及其后面的部分:而且自定义分享出去的链

  • Cisco路由交换设备之IOS故障排除

    IOS是路由器交换机设备的核心,IOS全称internet operate system,中文是网络操作系统的意思.他就好比计算机的操作系统windows一样,虽然是软件但出现问题就无法进行任何软件的运行了.所以如果IOS出现问题的话路由交换设备将无法正常运行,配置命令都将荡然无存.我们只能通过重新安装IOS来解决. 本文将以cisco 3550为例介绍IOS的恢复方法: 第一步:用控制线连接交换机console口与计算机串口1,用带有xmodem功能的终端软件连接(微软操作系统自带的超级终端软

  • Angularjs 动态改变title标题(兼容ios)

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <pre name="code" class="javascript">angular.module('myApp.loginCtrl', []) .config(function($httpProvider) { $httpProvider.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded;charset

  • iOS中关于模块化开发解决方案(纯干货)

    关于iOS模块化开发解决方案网上也有一些介绍,但真正落实在在具体的实例却很少看到,计划编写系统文章来介绍关于我对模块化解决方案的理解,里面会有包含到一些关于解耦.路由.封装.私有Pod管理等内容:并编写的一个实例项目放在git进行开源[jiaModuleDemo],里面现在已经放着一些封装的功能模块:会不断的进行更新,假如你感兴趣可以Star一下,项目也不断的更新完善优化:如果你有更好的方案或者说好的建议可以lssues,我会在短时间进行更新并修改相应的问题: 一:项目中存在的问题 1:当公司里

随机推荐