如何引用Swift中的导航控制器?
How to refer to navigation controller in Swift?
我创建了一个 UINavigationController
对象并将其设置为 window 的 rootViewController
属性。
UINavigationController
对象的rootViewController
是一个叫做UINavigationMenuViewController
的class。
例如,如果我想从 UINavigationMenuViewController
导航到 UIUserProfileViewController
,我可以使用:
navigationController!.pushViewController(userProfileVC, animated: true)
以及
navigationController?.pushViewController(userProfileVC, animated: true)
效果好像是一样的。我想知道有什么区别。
我想第二种方式更安全,如果我忘记将 UINavigationMenuViewController
对象嵌入 UINavigationController
,与第一种情况相比,应用程序不会崩溃。我猜它也被称为可选链接,我只是不太确定,因为我还在学习 Swift.
请多多指教
在第一种情况下,您明确解包了 navigationController,因此 navigationController 是 UINavigationMenuViewController 类型并且必须存在(否则会崩溃)。在第二种情况下,navigationController 是一个可选类型,不必存在。如果它不存在,当然什么也不会发生,也不会呈现任何视图。
如有疑问,选择链接总是比强制解包更安全,因为您提到的原因:如果变量为 nil,将导致应用程序崩溃。
在某些情况下,崩溃是一个很好的调试工具。如果将导航控制器设置为 nil,您可能希望将其视为开发错误,因此让应用程序崩溃会使错误更加明显。
除此之外,我的建议是始终使用可选链接and/or可选绑定,并将强制解包的使用限制在以下情况:
- 您确定可选值不为零
- 您刚刚检查了不是零
- (如上所述)如果可选项为 nil
,您确实希望应用程序崩溃
我创建了一个 UINavigationController
对象并将其设置为 window 的 rootViewController
属性。
UINavigationController
对象的rootViewController
是一个叫做UINavigationMenuViewController
的class。
例如,如果我想从 UINavigationMenuViewController
导航到 UIUserProfileViewController
,我可以使用:
navigationController!.pushViewController(userProfileVC, animated: true)
以及
navigationController?.pushViewController(userProfileVC, animated: true)
效果好像是一样的。我想知道有什么区别。
我想第二种方式更安全,如果我忘记将 UINavigationMenuViewController
对象嵌入 UINavigationController
,与第一种情况相比,应用程序不会崩溃。我猜它也被称为可选链接,我只是不太确定,因为我还在学习 Swift.
请多多指教
在第一种情况下,您明确解包了 navigationController,因此 navigationController 是 UINavigationMenuViewController 类型并且必须存在(否则会崩溃)。在第二种情况下,navigationController 是一个可选类型,不必存在。如果它不存在,当然什么也不会发生,也不会呈现任何视图。
如有疑问,选择链接总是比强制解包更安全,因为您提到的原因:如果变量为 nil,将导致应用程序崩溃。
在某些情况下,崩溃是一个很好的调试工具。如果将导航控制器设置为 nil,您可能希望将其视为开发错误,因此让应用程序崩溃会使错误更加明显。
除此之外,我的建议是始终使用可选链接and/or可选绑定,并将强制解包的使用限制在以下情况:
- 您确定可选值不为零
- 您刚刚检查了不是零
- (如上所述)如果可选项为 nil ,您确实希望应用程序崩溃