为什么以下内容在Swift中不起作用?
if someObject === nil {
}
您必须使用==运算符(例如
)进行测试if someObject == nil {
}
我认为===更像是确保完全相同的实例(基本上比较指针)和==更像是一个isEqual检查。因此我认为===更适合测试nil,但我显然是不正确的。
文档说明:
===或“与...相同”表示类类型的两个常量或变量 指的是完全相同的类实例。
==或“等于”表示两个实例被视为“相等”或“等效” 在价值方面,对于某种适当的“平等”含义,由类型设计师定义。“
答案 0 :(得分:18)
它的工作方式与您期望的完全相同:
var s: String? = nil
s === nil // true
唯一需要注意的是,要与nil
进行比较,您的变量必须能够 nil
。这意味着它必须是可选的,用?
表示。
var s: String
不允许为nil
,因此当false
与===
相比时,nil
总会返回{{1}}。
答案 1 :(得分:0)
我的第一直觉是nil
不是类实例,而是引用。因此someObject
不能是nil
的等效类实例。