如何在Swift中引用导航控制器?

时间:2015-04-14 15:45:24

标签: ios swift uinavigationcontroller optional-chaining

我创建了一个UINavigationController对象并将其设置为窗口的rootViewController属性。 rootViewController对象的UINavigationController是一个名为UINavigationMenuViewController的类。 例如,如果我想从UINavigationMenuViewController导航到UIUserProfileViewController,我可以使用:

navigationController!.pushViewController(userProfileVC, animated: true)

以及

navigationController?.pushViewController(userProfileVC, animated: true)

效果似乎是一样的。我想知道有什么区别。 我猜第二种方式更安全,如果我忘记将UINavigationMenuViewController对象嵌入UINavigationController内,与第一种情况相比,应用程序不会崩溃。我猜它也被称为可选项链接,我只是不太确定,因为我还在学习Swift。

请给我一些建议。

2 个答案:

答案 0 :(得分:2)

如果有疑问,它总是更安全地支持可选链接而不是强制解包,因为你提到的原因:如果变量是nil,它将导致应用程序崩溃。

在某些情况下,崩溃是一个很好的调试工具。如果将导航控制器设置为nil,您可能需要将其视为开发错误,因此使应用程序崩溃会使错误更明确。

除此之外,我建议始终使用可选链接和/或可选绑定,并限制强制解包的使用情况:

  • 您确定可选项不是nil
  • 你刚刚检查过nil
  • (如上所述)如果可选项为nil
  • ,您确实希望应用程序崩溃

答案 1 :(得分:1)

在第一种情况下,您显式展开了navigationController,因此navigationController是一个UINavigationMenuViewController类型,必须存在(否则崩溃)。在第二种情况下,navigationController是一个可选类型,并且不必存在。如果它不存在,当然不会发生任何事情,也不会出现任何观点。