简体   繁体   English

使用 Swift 中的开关访问 class 属性

[英]Access to class properties using switch in Swift

I have following class:我有以下 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()
  }
}

When i call当我打电话时

setRootViewControllerWithNavigationControlledEmbeded(route: Route, viewController: UIViewController){

i suppose that var navC = getCurrentNavC(route) will point to my class variable authNavigationController but in log i can see following:我想var navC = getCurrentNavC(route)将指向我的 class 变量authNavigationController但在日志中我可以看到以下内容:

auth vc nil
navC Optional(<UINavigationController: 0x7fd9ca025000>)

I want to get this properties with route but look like my logic not work, why?我想通过路由获取此属性,但看起来我的逻辑不起作用,为什么?

When app just launched it call - setInitialVC()当应用程序刚刚启动它调用 - setInitialVC()

Modify the setRootViewControllerWithNavigationControlledEmbeded function like below and try.如下修改 setRootViewControllerWithNavigationControlledEmbeded function 并尝试。

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()
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM