我有以下类(class):
class Router: NSObject {
enum Route {
case auth
case main
case news
}
private var authNavigationController: UINavigationController?
private var mainNavigationController: UINavigationController?
private var newsNavigationController: UINavigationController?
func setInitialVC(){
let vc = LoginService.initialVC()
setRootViewControllerWithNavigationControlledEmbeded(route: .auth,
viewController: vc)
}
private func getCurrentNavC(_ route: Route) -> UINavigationController?{
switch route {
case .auth:
return self.authNavigationController
case .main:
return self.mainNavigationController
case .news:
return self.newsNavigationController
}
}
private func setRootViewControllerWithNavigationControlledEmbeded(route: Route,
viewController: UIViewController){
var navC = getCurrentNavC(route)
self.window = UIWindow(frame: UIScreen.main.bounds)
navC = UINavigationController.init(rootViewController: viewController)
print("auth vc \(authNavigationController)")
print("navC \(navC)")
self.window?.rootViewController = navC
self.window?.makeKeyAndVisible()
}
}
当我打电话时
setRootViewControllerWithNavigationControlledEmbeded(route: Route, viewController: UIViewController){
我认为 var navC = getCurrentNavC(route)
将指向我的类变量 authNavigationController
但在日志中我可以看到以下内容:
auth vc nil
navC Optional(<UINavigationController: 0x7fd9ca025000>)
我想通过路由获取此属性,但看起来我的逻辑不起作用,为什么?
当应用程序刚刚启动时,它调用 - setInitialVC()
最佳答案
像下面这样修改 setRootViewControllerWithNavigationControlledEmbeded 函数并尝试。
private func setRootViewControllerWithNavigationControlledEmbeded(route: Route,
viewController: UIViewController){
var navC = getCurrentNavC(route)
self.window = UIWindow(frame: UIScreen.main.bounds)
//navC = UINavigationController.init(rootViewController: viewController)
print("auth vc \(authNavigationController)")
print("navC \(navC)")
self.window?.rootViewController = navC
self.window?.makeKeyAndVisible()
}
关于ios - 在 Swift 中使用 switch 访问类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58097551/