斯威夫特===没有

时间:2014-06-19 19:19:13

标签: swift

为什么以下内容在Swift中不起作用?

if someObject === nil {
}

您必须使用==运算符(例如

)进行测试
if someObject == nil {
}

我认为===更像是确保完全相同的实例(基本上比较指针)和==更像是一个isEqual检查。因此我认为===更适合测试nil,但我显然是不正确的。

文档说明:

  

===或“与...相同”表示类类型的两个常量或变量   指的是完全相同的类实例。

     

==或“等于”表示两个实例被视为“相等”或“等效”   在价值方面,对于某种适当的“平等”含义,由类型设计师定义。“

2 个答案:

答案 0 :(得分:18)

它的工作方式与您期望的完全相同:

var s: String? = nil
s === nil // true

唯一需要注意的是,要与nil进行比较,您的变量必须能够 nil。这意味着它必须是可选的,用?表示。

var s: String不允许为nil,因此当false===相比时,nil总会返回{{1}}。

答案 1 :(得分:0)

我的第一直觉是nil不是类实例,而是引用。因此someObject不能是nil的等效类实例。