来自appiftlegate的popToRootViewController在swift中

我试图从应用程序委托弹出到导航堆栈的根视图控制器,并有一些问题将obj-c中的工作转换为swift。

什么在obj-c中有效:

UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; [navigationController popToRootViewControllerAnimated:YES]; 

我转换的尝试:

  var navigationController: UINavigationController = self.window?.rootViewController; navigationController.popToRootViewControllerAnimated(true); 

我得到一个错误说UIViewController? 不能转换为UINavigationController’

我怎样才能解决这个问题?

这里有一些事情在起作用:

1)rootViewController将作为可选项返回,因为window和rootViewController属性都是可选的。 因此,我们需要打开它以确保这些值实际存在

2)rootViewController被定义为UIViewController – 而不是UINavigationController子类。 我们需要将它转换为UINavigationController,以便能够作为一个对它进行操作。

尝试安全地将根视图控制器展开为UINavigationController:

 if let navigationController = self.window?.rootViewController as? UINavigationController { navigationController.popToRootViewController(animated: true) } 

swift 3使用这个:

  _ = navigationController?.popToRootViewController(animated: true)