初始化配置路由表
新建NavigatorMap文件,添加如下內(nèi)容
import URLNavigator
struct NavigatorMap {
static func initialize(navigator: NavigatorType) {
navigator.register("myapp://user/<int:id>") {url, values, context in
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "OtherViewController") as! OtherViewController
vc.title = "dajiahao"
vc.showText = "wohaoa"
guard let userID = values["id"] as? Int else { return nil }
print(userID)
print(url)
print(values)
print(context!)
vc.delegate = context as? callBackDelegate
return vc
// return OtherViewController()
}
// navigator.register("myapp://post/<title>") { ... }
// navigator.handle("myapp://alert") { ... }
}
}
導(dǎo)入頭文件URLNavigator患朱,注冊(cè)u(píng)rl:myapp://user/<int:id>鲁僚,<int:id>是一個(gè)字典數(shù)據(jù),用于數(shù)據(jù)的傳遞,閉包中的url為myapp://user冰沙,values為["id": 123]侨艾,context為ViewController(一般用于傳輸額外的字典數(shù)據(jù),多用于代理拓挥,閉包等唠梨,當(dāng)前控制器的句柄)
路由表配置完畢,我們就可以在appdelegate里面進(jìn)行初始化了
在didFinishLaunchingWithOptions方法中添加如下
import UIKit
import URLNavigator
public let navigator = Navigator()
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
NavigatorMap.initialize(navigator: navigator)
let window = UIWindow(frame: UIScreen.main.bounds)
window.makeKeyAndVisible()
window.backgroundColor = .white
let vc = ViewController(navigator: navigator, username: "nihao")
window.rootViewController = UINavigationController(rootViewController: vc)
self.window = window
return true
}
}
加載路由表NavigatorMap.initialize(navigator: navigator)侥啤,ViewController(navigator: navigator, username: "nihao")這里有一個(gè)navigator: navigator的傳輸当叭,下一個(gè)控制器的init方法中我們可以將navigator傳入,然后使用navigator.push("myapp://user/123", context: self)進(jìn)行跳轉(zhuǎn)盖灸。我們也可以在appdelegate里面加入全局的public let navigator = Navigator()進(jìn)行跳轉(zhuǎn)使用蚁鳖,這樣我們就不用每一個(gè)頁面去傳入navigator。