MGJRouter_Swift 0.1.3

MGJRouter_Swift 0.1.3

Wade 维护。



  • 作者
  • 老渔翁

MGJRouter_Swift

一个高效/灵活的 iOS Swift 版 URL Router,完全实现了蘑菇街 Object-C 版 MGJRouter 的所有功能。尽管 GitHub 上也有一款参照 MGJRouter 仿写的 Swift 版框架,但却去掉了 MGJRouter 的许多功能,实用性不高。

为什么要写 MGJRouter_Swift ?

我看了几款不错的 Object-C 版的 Router,比如:JLRoutesHHRouterMGJRouter,但是仍然觉得 Object-C 版的 MGJRouter 在查找 URL 上更高效。

尽管 Object-C 版的 MGJRouter 也可以在 Swift 中使用,但仍然存在问题,比如 block 调用这块。因此说,基于这个不足,MGJRouter_Swift 因此诞生。

安装

pod 'MGJRouter_Swift'

使用方式

基本用法

MGJRouter.registerWithHandler("mgj://foo/bar") { (routerParameters) in
   print("routerParameters:\(routerParameters ?? [:])")
}
        
MGJRouter.open("mgj://foo/bar")

当匹配到 URL 后,routerParameters 会自带几个 key

public let MGJRouterParameterURL = "MGJRouterParameterURL"
public let MGJRouterParameterCompletion = "MGJRouterParameterCompletion"
public let MGJRouterParameterUserInfo = "MGJRouterParameterUserInfo"

处理中文也没有问题

MGJRouter.registerWithHandler("mgj://category/家居") { (routerParameters) in
   print("routerParameters:\(routerParameters ?? [:])")
}
        
MGJRouter.open("mgj://category/家居")

打开(Open)时,可以传递一些 userinfo 信息

MGJRouter.registerWithHandler("mgj://category/travel") { (routerParameters) in
    print("routerParameters:\(routerParameters ?? [:])")
}
        
MGJRouter.open("mgj://category/travel", ["user_id": "1900"], nil)

如果有可变参数(包括 URL 查询参数),将会被自动解析

MGJRouter.registerWithHandler("mgj://search/:query") { (routerParameters) in
    print("routerParameters:\(routerParameters ?? [:])")
}
        
MGJRouter.open("mgj://search/bicycle?color=red")

定义一个全局的 URL 模式作为回退(Fallback)

MGJRouter.registerWithHandler("mgj://") { (routerParameters) in
    print("没有人处理该 URL,就只能 fallback 到这里了")
}
        
MGJRouter.open("mgj://search/travel/china?has_travelled=0")

当打开(Open)操作结束时,执行完成(Completion)块

MGJRouter.registerWithHandler("mgj://detail") { [weak self] (routerParameters) in
    print("匹配到了 url, 一会会执行 Completion 闭包")
            
    // 模拟 push 一个 VC
    DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
       let completion = routerParameters?[MGJRouterParameterCompletion] as? ((Any?)->())
       completion?(nil)
    })
}
        
MGJRouter.open("mgj://detail", nil) { [weak self] (obj) in
    self?.appendLog("Open 结束,我是 Completion Block")
}

生成 URL

URL 处理不当,容易散落在项目的各个角落,不利于管理。例如,注册时的模式为 mgj://beauty/:id,打开时为 mgj://beauty/123,如果 URL 发生变动,处理起来就会很麻烦,不利于统一管理。

因此,MGJRouter_Swift 提供了一个类方法来解决这个问题。

class func generateURL(_ pattern: String, _ parameters: [String]) -> String?

使用方法

let TEMPLATE_URL = "mgj://search/:keyword"

MGJRouter.registerWithHandler(TEMPLATE_URL) { (routerParameters) in
   print("routerParameters[keyword]:\(routerParameters?["keyword"] as? String ?? "")") // Hangzhou
}
        
MGJRouter.open(MGJRouter.generateURL(TEMPLATE_URL, ["Hangzhou"]) ?? "")

这样就可以在一个地方定义所有的 URL 模式,使用时,只需使用这个方法生成 URL 即可。

协议

MGJRouter_Swift 证书下使用 MIT 协议。查阅 LICENSE 文件以获取更多信息。

作者其他框架

RSA_Swift:这是一个轻量级的 Swift 版本框架,框架功能包括:RSA 加密/解密字符串、RSA 加密/解密 Data、字符串的 MD5、获取文件的 MD5 值。

作者有话说

如果您有任何建议,可以关注我的公众号:iOS开发者进阶,直接留言,留言必回。

输入图片说明