0

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

navigationController!.pushViewController(userProfileVC, animated: true)

navigationController?.pushViewController(userProfileVC, animated: true)

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

请给我一些建议。

4

2 回答 2

2

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

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

除此之外,我的建议是始终使用可选链接和/或可选绑定,并将强制展开的使用限制在以下情况:

  • 你确定一个 optional 不是 nil
  • 你刚刚检查了 not nil
  • (如上所述)如果可选项为 nil,您确实希望应用程序崩溃
于 2015-04-14T15:55:37.527 回答
1

在第一种情况下,您显式地解开 navigationController,因此 navigationController 是 UINavigationMenuViewController 类型并且必须存在(否则崩溃)。在第二种情况下,navigationController 是可选类型,不必存在。如果它不存在,当然什么都不会发生,也不会出现任何视图。

于 2015-04-14T15:48:49.910 回答