A URL Router for iOS, written in Swift, inspired by HHRouter and JLRoutes.
| SwiftRouter Version | Swift Version | Note |
|---|---|---|
| Before 1.0.7 | 2.0 | n/a |
| 1.0.7 | 2.2 | n/a |
| 2.0.0 | 3.0 | n/a |
| 2.1.0 | 3.0 | Breaking changes by adopting exception |
| 3.0.0 | 4.0 | @objc should be used with properties |
SwiftRouter is compatible with Carthage. Add it to your Cartfile:
github "skyline75489/SwiftRouter" pod 'JLSwiftRouter' use_frameworks!Add SwiftRouter.swift in your project.
Define properties in your custom ViewController:
class UserViewController: UIViewController { @objc var userId:String? @objc var username:String? @objc var password:String? }Map URL to ViewController:
import SwiftRouter let router = Router.shared router.map("/user/:userId", controllerClass: UserViewController.self)Get instance of ViewController directly from the URL. Parameters will be parsed automatically:
let vc = router.matchController("/user/1?username=hello&password=123")! XCTAssertEqual(vc.userId, "1") XCTAssertEqual(vc.username, "hello") XCTAssertEqual(vc.password, "123")This will load controller using init() method. If you want to load view controller from storyboard - use:
let vc = router.matchControllerFromStoryboard("/user/1?username=hello&password=123", storyboardName: "MyStoryboard")!This code will load controller from storyboard named MyStoryboard.storyboard. Just don't forget to set that controller identifier in storyboard to its class name. In this case UserViewController.
Push custom ViewController:
router.routeURL("/user/123", navigationController: self.navigationController!) // The custom ViewController will be pushed with parameters.Define your custom handler function and map it to URL:
router.map("/user/add", handler: { (params:[String: String]?) -> (Bool) in XCTAssertNotNil(params) if let params = params { XCTAssertEqual(params["username"], "hello") XCTAssertEqual(params["password"], "123") } return true })Call the handler from router:
router.routeURL("/user/add?username=hello&password=123") // The handler function will be called with parameters.