[TOC]
UIKit的路由工具
DPRouter支持Swift Package和CocoaPods
如果使用Swift Package,在Package.swift
中加入
dependencies: [
.package(url: "https://github.com/DancewithPeng/DPRouter.git", .upToNextMinor(from: "1.2.0"))
]
在Podfile
文件中加入
pod 'DPUIKitRouter', '~> 1.3.0'
因为
DPRouter
这个名字的Pod库已经存在,所以没有使用DPRouter
作为Pod库的名称
首先需要在路由的目标页面遵循DPRouterPage
协议,并实现协议中规定的方法
extension ArticleDetailViewController: Router.PageProvider {
// 通过静态方法,返回URL对应的ViewController实例
static func page(for url: URL) -> UIViewController? {
let detailPage = ArticleDetailViewController(nibName: "ArticleDetailViewController", bundle: Bundle(for: ArticleDetailViewController.self))
detailPage.navigationItem.title = "文章详情"
return detailPage
}
}
其次在进行路由之前,需要先将页面注册到DPRouter中
DPRoute("sub.myhost.com/articles/detail", ArticleDetailViewController.self)
在需要进行路由的调用处,通过URL进行路由
Router.shared.route(to: "sub.myhost.com/articles/detail")
DPRouter提供路由策略的注册,可以给每个不同的URL指定不同的策略
首先需要先实现自己的路由策略
final class MyRoutePolicy: NSObject, RoutePolicy {
static func policy() -> MyRoutePolicy {
return MyRoutePolicy()
}
func route(with url: URL) -> Bool {
// 这里可以通过Router.ResourceDespatcher获取对应的页面对象
// 如果这里实现的是routeTargetPage(_:,url:),那么会自定执行`Router.ResourceDespatcher.shared.page(for:)`方法获取对应的页面
let targetPage = Router.ResourceDespatcher.shared.page(for: url)
// 这里自定义呈现targetPage的逻辑
return true
}
}
然后在初始化时,向Router注册策略,当遇到对应的URL时,就会选取对应的策略进行路由
Router.shared.register(MyRoutePolicy.policy(), for: "sub.myhost.com/articles/detail")
也可以指定Router
的默认策略,当没有针对特定的URL注册策略时,会通过默认的策略进行处理。DPRouter中提供了Router.ShowOnCurrentPageRoutePolicy
作为默认策略,你也可以指定自己的默认策略
Router.shared.defaultRoutePolicy = ...
希望DPRouter提供以下功能:
此项目采用MIT开源协议,点击查看详情
link |
Stars: 1 |
Last commit: 37 weeks ago |
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics