SortingHat
SortingHat
是一个纯 Swift 的路由库。提供通用的 URL
调用方案和枚举传参的内部调用方案。
特性
- 通过协议声明式的路由规则定义,方便使用
- 安全可靠的内部调用方式,参数变更引发的错误将在编译阶段暴露,让您放心
- 代码自动生成,无需手动注册,贴心设计
示例
- 定义路由节点
extension DetailViewController: URLRoutable {
static var urlPattern: String {
return "x://detail/:id"
}
struct Parameters: ParametersDecodable {
// This is a type wrapper like Box<Int>: Decodable
let id: ValueType.Int
}
static func constructViewController(params: Parameters) -> UIViewController? {
let vc = DetailViewController()
vc.title = String(params.id.value)
return vc
}
}
- 注册路由
// 注册ViewController节点
SortingHat.register(node: RouteNode<DetailViewController>())
// 注册Handler节点
SortingHat.register(url: "x://handler/:target/:action") { (params) -> String? in
guard let target = params["target"] as? String,
let action = params["action"] as? String
let content = params["content"] as? String
else { return nil }
return "target: \(target)\naction: \(action)\ncontent:\(content)"
}
- 在
模块中枢
中添加路由节点(以下代码将自动生成 将来)
extension ModuleCenter {
enum Demo {
case detail(title: String)
case list(title: String, id: String)
}
}
extension ModuleCenter.Demo: RouteTargetType {
var node: RouteNodeType {
switch self {
case .detail: return RouteNode<DetailViewController>()
case .list: return RouteNode<ListViewController>()
}
}
}
- 业务场景中使用
// URL调用方式
SortingHat.show(targetUrl: "x://detail?title=SortingHat.detail", from: self)
// 内部Target调用方式
SortingHat.show(target: ModuleCenter.Demo.list(title: "SortingHat.list", id: "BJ2019"), from: self)
// Handler for url
SortingHat.handle(url: "x://handler/storyTarget/commentAction?content=Hello,SortingHat")
// ViewController之间的传值问题. Handle message between viewControllers.
SortingHat.show(targetUrl: "x://detail?title=MessageSender", from: self) { message in
guard if let content = message as? String else { return print("Not match the message.") }
print("Content is \(content)")
}
路线图
- 单元测试。
- 在模块加载点注册 URL。
- 为子模块自动生成扩展代码。
- 文档。
安装
pod 'SortingHat', '~> 0.2'
协议
SortingHat 在 MIT 协议下可用。有关更多信息,请参阅 LICENSE 文件。