ios - 在 Swift 中使用 switch 访问类属性

标签 ios swift

我有以下类(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/

相关文章:

ios - 如何在Ionic/Cordova构建中正确引用iOS第三方框架,以免引发dyld:库未加载:@rpath错误

ios - 为 UIImagePicker 添加圆形裁剪组件?

ios - XMPP 在离线时获取房间配置更改消息

ios - 如何更改 SceneKit 中枢轴点的位置

ios - 在 Swift 中丢失对实例属性的引用

ios - 安排每小时重复本地通知的问题

ios - 如何为 SFSafariViewController 中的控件设置自定义字体?

swift - 数据库引用错误

ios - 从网络为 TableViewController 加载数据

ios - 在 xcode 项目中使用 Matlab 功能