初始化配置路由表
新建NavigatorMap文件,添加如下内容
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") { ... }
}
}
导入头文件URLNavigator,注册url:myapp://user/<int:id>,<int:id>是一个字典数据,用于数据的传递,闭包中的url为myapp://user,values为["id": 123],context为ViewController(一般用于传输额外的字典数据,多用于代理,闭包等,当前控制器的句柄)
路由表配置完毕,我们就可以在appdelegate里面进行初始化了
在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")这里有一个navigator: navigator的传输,下一个控制器的init方法中我们可以将navigator传入,然后使用navigator.push("myapp://user/123", context: self)进行跳转。我们也可以在appdelegate里面加入全局的public let navigator = Navigator()进行跳转使用,这样我们就不用每一个页面去传入navigator。