作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在简短教程中here ,在第 5 步中分配了一个委托(delegate):
if let nav = segue.destination as? UINavigationController,
let classBVC = nav.topViewController as? ClassBVC {
// 'self' is ClassAVC which has been delegated.
classBVC.delegate = self
}
我发现很难遵循这些陈述,所以只写是不是一个很大的缺点:
let nav = segue.destination as? UINavigationController
let classBVC = nav?.topViewController as? ClassBVC
classBVC!.delegate = self
最佳答案
没有顺序绑定(bind)这样的东西。您在第二条语句中所做的称为带有可选转换的可选链接,如果不是最后一行中的强制展开,这将是安全的。
此处的力展开使您的第二个解决方案不安全。如果之前的任何可选操作导致 nil
值,将发生运行时异常。
classBVC!.delegate = self
如果您需要解包一个可选值,可选绑定(bind)是最好的选择之一。您可以通过减少 if let
语句的数量来使可选解包的样板代码最少。在某些情况下,使用 guard let
而不是 if let
也可以使代码更清晰,因为您不必将 block 彼此嵌套。
使用可选绑定(bind),你永远不会看到
unexpectedly found nil while unwrapping an optional value
运行时异常,如果您强制解包实际上可能具有 nil
值的可选值,您可能会经常看到这种情况。
guard let nav = segue.destination as? UINavigationController, let classBVC = nav.topViewController as? ClassBVC else { return }
classBVC.delegate = self
关于swift - 在 Swift 中进行可选绑定(bind)比顺序绑定(bind)有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46308519/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!