【发布时间】:2014-07-14 00:48:53
【问题描述】:
我对此感到很困惑。如果我们以UITableView中的cellForRowAtIndexPath:方法为例,它的方法签名是:
func cellForRowAtIndexPath(_ indexPath: NSIndexPath!) -> UITableViewCell!
而它的返回值为:
表示表格单元格的对象,如果单元格不可见或 indexPath 超出范围,则为 nil。
这听起来是使用标准可选项的完美理由。事实上,由于在 Objective-C 中所有基于指针的类型都可以是 nil...所有 Objective-C 指针类型都应该作为标准选项导入似乎是有道理的。
我从 WWDC 的谈话中知道,他们说对于隐式展开的选项:
- 可以显式测试 nil
- 可以直接访问底层值的属性/方法
- 可以隐式转换为其基础值
来自苹果的Using Swift with Cocoa and Objective-C:
当您访问这种可选类型中的值而没有先安全地解包它时,隐式解包的可选项会检查该值是否丢失。如果缺少该值,则会发生运行时错误。
因此,他们决定将其导入为声明 this 永远不应该为 nil 的东西,而不是将可能的 nil 值作为可选值导入 Swift ......但可能吗?听起来他们这样做完全否定了 Swift 中用于 Objective-C API 的可选类型的安全性。我似乎缺少什么?
他们认为运行时错误更好,而不是给出编译时错误或警告?这非常令人困惑。
考虑到似乎没有任何东西可以回答我所看到的这个问题...我认为这对其他人来说是显而易见的,我只是没有看到但是...为什么会这样?
真的只是为了让人们在 Swift 中使用 Objective-C API 时免于使用 if let 或可选链接,还是其他方式?
【问题讨论】:
标签: ios objective-c interop swift optional