Swift 相等运算符是否意味着强制展开?
请注意最后两行:Swift 相等运算符是否意味着强制展开?,swift,forced-unwrapping,Swift,Forced Unwrapping,请注意最后两行: var optionalString: String? // nil optionalString == "A" // false //optionalString! == "A" // EXC_BAD_INSTRUCTION optionalString = "A" // “A” optionalString == "A" // true optionalString! == "A" // true 这是否意味着我们在比
var optionalString: String? // nil
optionalString == "A" // false
//optionalString! == "A" // EXC_BAD_INSTRUCTION
optionalString = "A" // “A”
optionalString == "A" // true
optionalString! == "A" // true
这是否意味着我们在比较时不需要打开可选项?这是
==
运算符的定义,看起来它在本例中使用:
public func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
在第二个参数中,传递一个literala
,它被包装在一个optional中以进行类型检查。代码编译并运行
请注意,这与隐式展开第一个参数完全不同。这不是一个安全的操作,并且会破坏整个可选功能。显然,人们可以将任何可选功能与
无进行比较
optionalString == nil
如果可选项现在为nil
,则为真
即使这样也行得通:
if "A" != nil {
print("A")
}
比较大致相同的问题。参考问题是关于比较x
,其中x
是可选的Int?
,y
是非可选的Int
。给出的答案也适用于=
。相关:与相比,nil
应该是一个明显的特征,因为它是可选值的可能有效值之一。但请注意,这与隐式展开的选项无关。@zoul因此nil
或Some(T)
,其中最后总是true
?对不起,我不明白这个问题,你能重新措辞吗?
if "A" != nil {
print("A")
}