A URL Router for iOS, written in Swift 2.0, inspired by HHRouter and JLRoutes.
SwiftRouter is compatible with Carthage. Add it to your Cartfile
:
github "skyline75489/SwiftRouter"
Define properties in your custom ViewController:
class UserViewController: UIViewController {
var userId:String?
var username:String?
var password:String?
}
Map URL to ViewController:
import SwiftRouter
let router = Router.sharedInstance
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.