【发布时间】:2014-07-27 01:54:55
【问题描述】:
编辑:这个问题的目的是了解隐式可选运算符“!”的使用。在早期的 UIKit API 更新中,特别是如果一个函数被声明为返回一个预期为非可选的类型,为什么要使用可选的,如果它是可选的,为什么不使用可选的“?”操作员。 “!”的语义不过总是很清楚。
正如后来显示的那样,Apple 审核 API 以使可选性更加精确是一个问题,使用 ?对于真正的可选类型,并在它们实际上是非可选类型时使用非可选类型。这是对通常模棱两可的原始 Objective-C 签名的保留。
swift 文档解释了 !可选类型的拆箱运算符,
var optionalString : String? = "optional"
var regularString: String = optionalString!
但他们自己在类型定义上使用了它(字符串!),我找不到明确的解释。
例子:
func takesBang(value:String!) -> String {
if !value {
return "nil value, without the safe syntax"
}
return "This works"
}
var unsafe:String!
takesBang(unsafe) // yields "nil value, without the safe syntax"
字符串! type 不会强制对可选类型进行拆箱,但似乎只是消除了对可选语法 (?.) 的需求。 Apple 在他们自己的示例中使用了这一点,但它似乎只是否定了可选的安全(指针)机制。
谁能解释一下目的/动机?这似乎通常是不安全的,因为调用者不必检查或至少考虑它们的值。
【问题讨论】: