美文网首页
页面路由-Swift-ACRouter

页面路由-Swift-ACRouter

作者: Archerlly | 来源:发表于2017-03-16 00:54 被阅读307次

ACRouter


ACRouter 造轮子的由来

现在已经有很成熟的Router工具, 如 JLRoutesMGJRouter, 它们的star和使用者都不少, 那么我为什么还要自己造轮子呢?

  1. 这些都是用OC写的, 对于一个纯Swift项目, 总感觉哪不对劲
  2. 这些第三方都有自己的一个侧重点, 如JLRoutes更侧重于URL的解析, 而MGJRouter则侧重于解析后的使用, 确切来说后者是基于前者并在自己的使用场景下开发完成的. 而对于ACRouter的功能侧重点又与前两者不一样
  3. 抱着学习的心态, 对于大部分coder造轮子的初衷就是学习, 并且能使学习的成果产出并被大家认可

Router的定义: 路由是把信息从源穿过网络传递到目的的行为

ACRouter并不是要实现一个能将所有信息转化后传递到目的地的工具, 而只是一个简单的页面路由, 希望项目中的页面跳转不再需要彼此相互依赖, 只需要像Web一般通过一个特殊的URL就能完成页面间的跳转.

页面路由其实是做项目组件化的一个衍生物, 组件化需要将整个项目的各个模块进行解耦, 而对于模块间页面相互跳转的解耦, 如今最佳的解决方案就是页面路由.
页面路由并不是一个新的概念, 早在几年前就已经在实际App项目中使用了, 但当时这并不是大家的痛点, 所以并没有兴起. 而如今手机App的功能越来越复杂多样. 之前的一个Target, 一个Module的项目结构已经无法支持其快速发展与迭代了.

个人对Router的理解并不是解耦, 而是转移耦合. 将部分耦合转移到模块内部或由一个公共的工具统一管理, 实现在模块外部来看完成了模块间的解耦的假象. 尽管这是一个解耦的假象, 但是对于模块外的使用确实带来了不少的便利.

由于需要转移耦合, 做到高内聚低耦合, 因此必不可少的需要不少胶水代码, 使其”粘”在Router的这根主线上. 所以总体看来使用Router并不会带来明显的代码量减少, 但是对于项目结构的管理与多模块的并行开发带来了不少的优势, 但这种优势对于小项目可能无法体现, 但是对于大项目组件化已经成为了必不可少的一部分.

ACRouter的大致流程: 将一个Block与一个URL进行绑定, request 对应的URL的同时执行与其绑定的Block

总体流程

process.jpg

快速使用

  1. 需要路由的控制器遵守协议ACRouterable, 并实现方法registerAction.
class CustomViewController: UIViewController, ACRouterable {
    static func registerAction(info: [String : AnyObject]) -> AnyObject {
        let newInstance = LoginViewController()
        if let title = info["username"] as? String {
            newInstance.title = title
        }
        return newInstance
    }
}
  1. 注册路由
ACRouter.addRouter("AA://bb/cc/:p1", classString: "CustomViewController")
  1. 通过URL打开控制器
ACRouter.openURL("AA://bb/cc/content?value1=testInfo")

便利方法

  • 快速添加路由映射关系
let registerDict = ["AA://bb/cc/:p1" : "CustomViewControllerOne", "AA://ee/ff" : "CustomViewControllerTwo"]
ACRouter.addRouter(registerDict)
  • 快速生成跳转URL
//自动将参数params和jumptype嵌入到注册的URL当中
ACRouter.generate(_ patternString: params:  jumpType: )
  • 检查跳转URL
canOpenURL(_ urlString: )
  • 移除路由
removeRouter(_ patternString: )

自定义使用

  1. 添加路由, 自己配置优先级和HandleBlock
//注册的路由将按优先级逆序排序
ACRouter.addRouter(patternString:  priority: handle: )
  1. 请求URL
//返回匹配的路由与所有解析出来的参数
ACRouter.requestURL(urlString: userInfo: )

Todo list

  • Add Interceptor for router
  • Add Test for router
  • Add openURL failed action
  • Add relocation
  • openURL not only support Viewcontroller jumping

具体文档稍后更新, 感兴趣的小伙伴可以留意ACRouter Github, 小编将同步更新.

未完待续....

相关文章

  • 页面路由-Swift-ACRouter

    ACRouter ACRouter 造轮子的由来 现在已经有很成熟的Router工具, 如 JLRoutes 与 ...

  • Android路由框架-ARouter详解

    文章大纲 一、页面路由基本介绍1.什么是页面路由2.为什么要使用页面路由二、页面路由框架ARouter介绍1.常用...

  • Router 原理及 React-Router

    页面路由(浏览器路由) 页面会刷新 hash路由 页面不会刷新,之前做单页应用,使用的传统方法。 h5 路由 h5...

  • react 路由模块化 嵌套路由

    路由模块封装 首页面父子路由传递 user用户组件嵌套子路由页面

  • flutter04: 路由跳转

    路由分两种:静态路由和动态路由 Flutter里面有路由支持所有的路由场景,push、pop页面,页面间的参数传递...

  • 与Vue.js的第九天

    今天学习了路由 路由 路由 路由vue-router是vue的核心组件根据不同的url访问不同页面配合单页面使用 ...

  • 微信小程序之页面路由

    页面路由 在小程序中所有页面的路由全部由框架进行管理。 页面栈 框架以栈的形式维护了当前的所有页面。 当发生路由切...

  • 子路由返回父路由刷新父页面

    子路由页面返回父路由页面,需要刷新数据可以判断路由中的match.isExact属性,true的时候,说明路由定位...

  • 手撸博客3 文章列表及文章

    1 设计思路 1.1 路由设计 /article路由到文章列表页面/article/aid路由到具体的文章页面 1...

  • 2018-09-26 路由

    路由.切换页面 2.路由嵌套

网友评论

      本文标题:页面路由-Swift-ACRouter

      本文链接:https://www.haomeiwen.com/subject/nkcdnttx.html