【发布时间】:2015-06-30 20:29:24
【问题描述】:
我知道我们需要在 Swift 中将函数的参数定义为既不是隐式展开的可选参数,也不是可选参数,以使其非零。但是,我不确定隐式展开的可选或可选之间更常规的是什么。
我正在观看 WWDC 2014 Swift interoperability in depth,对幻灯片中显示的两个示例有点困惑。基本上是关于我们在定义函数时是否应该使用隐式可选参数或解包参数。
视频示例
下面是那个WWDC 2014 Swift interoperability in depth的截图(09:01) 演讲者的报价是
你再次看到这是一个隐式展开的可选,所以你可以 在这里传递一个 nil 块。
注意,这里的 url 和 completionHandler 都是隐式的未包装选项,我们可以将 nil 传入其中。一切顺利!
头文件示例
然而当我查看UIKit UITableViewCell时,我发现大部分方法都是用可选参数定义的,例如
init(style: UITableViewCellStyle, reuseIdentifier: String?)
基本上它暗示这些参数也可以为零。
似乎 ? 和 ! 都试图提出相同的建议(可以是 nil)。
我理解 ? 意味着我们将把任何值包装成 optional 值(即使是 nil),而 ! 意味着我们将打开它如果传入的是 可选 值。但我不确定我们应该使用 ! 还是 ?。哪个是传统的?
更新
看起来来自 WWDC 2014 的视频不太正确或过时。视频截图显示了 UIDocument 头文件,它与当前的 UIKit 头文件不同。好像当时都被定义为!。但现在它要么是 ? 要么是普通类型。
WWDC 2014 Swift 深度互操作性(16:25)
当前头文件
【问题讨论】: