SwiftRoutes
iOS 的 Swift 编写的 URL 路由器,灵感来源于 JLRoutes.
要求
iOS 8.0 或更高版本。
安装
Carthage
SwiftRoutes 与 Carthage 兼容。将其添加到您的 Cartfile
。
github "takecian/SwiftRoutes"
Cocoapods
SwiftRoutes 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "SwiftRoutes"
使用方法
- 注册路由(URL)和处理程序。
- 使用 URL 调用
routeUrl
。 - SwiftRoutes 将触发匹配的处理程序。
SwiftRoutes.addRoute(URL(string: "http://yourdomain.com/users/")!) { (params) -> Bool in
let viewController = SomeViewController()
navigationController.pushViewController(viewController, animated: true)
return true
}
SwiftRoutes.routeUrl(URL(string: "http://yourdomain.com/users/")!))
参数字典
SwiftRoutes 从以下数据提供参数作为字典。
- 部分 URL(开发者可以使用前缀
:
指定名称) - 查询字符串
SwiftRoutes.addRoute(URL(string: "http://yourdomain.com/users/:userid")!) { (params) -> Bool in
let viewController = SomeViewController()
let userId = params["userid"] <- userId is "1234"
let name = params["name"] <- name is "testname"
viewController.userid = userId
navigationController.pushViewController(viewController, animated: true)
return true
}
SwiftRoutes.routeUrl(URL(string: "http://yourdomain.com/users/1234?name=testname")!))
实际示例 - 使用 SwiftRoutes处理 UIApplicationShortcutItem
此示例展示了如何使用 SwiftRoutes 执行 UIApplicationShortcutItem
。
1. 在 info.plist 中定义 UIApplicationShortcutItem
此处定义了两个 UIApplicationShortcutItems。ShortcutItemType 有要处理的眼标。
...
<key>UIApplicationShortcutItems</key>
<array>
<dict>
<key>UIApplicationShortcutItemIconFile</key>
<string>Home</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Home</string>
<key>UIApplicationShortcutItemType</key>
<string>/home</string>
<key>UIApplicationShortcutItemUserInfo</key>
<dict>
<key>key1</key>
<string>value1</string>
</dict>
</dict>
<dict>
<key>UIApplicationShortcutItemIconFile</key>
<string>Setting</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Setting</string>
<key>UIApplicationShortcutItemType</key>
<string>/setting</string>
<key>UIApplicationShortcutItemUserInfo</key>
<dict>
<key>key1</key>
<string>value1</string>
</dict>
</dict>
</array>
...
2. 定义路由处理程序
在应用启动时定义路由和处理程序。
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Define routing
SwiftRoutes.addRoute(URL(string: "/home")!) { (params) -> Bool in
self.window.rootViewController.moveToHome() // pseudo code
return true
}
SwiftRoutes.addRoute(URL(string: "/setting")!) { (params) -> Bool in
self.window.rootViewController.moveSetting() // pseudo code
return true
}
}
}
只需将 SwiftRoutes.routeUrl(_)
放到 application(application:performActionForShortcutItem:completionHandler)
方法的调用中,并将 SwiftRoutes.routeUrl(_)
返回结果传递给 completionHandler(_)
。
@available(iOS 9.0, *)
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
let val = SwiftRoutes.routeUrl(URL(string: shortcutItem.type)!)
completionHandler(val)
}
takecian
SwiftRoutes 可以在 MIT 许可下使用。查看 LICENSE 文件以获取更多信息。