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
在第二个参数中,传递一个literal
a
,它被包装在一个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")
}