Swift==带零

Swift==带零,swift,Swift,为什么以下内容在Swift中不起作用 if someObject === nil { } 您必须使用==运算符进行测试,例如 if someObject == nil { } 我认为===更像是确保实例完全相同(基本上比较指针),而==更像是一个等质量检查。因此,我认为===更适合针对nil进行测试,但我显然是不正确的 文件规定: ==或“等同于”表示两个类类型的常量或变量 引用完全相同的类实例 ==或“等于”表示两个实例被视为“相等”或“等效” 在值中,对于“equal”的某些适当含义,由

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

if someObject === nil {
}
您必须使用==运算符进行测试,例如

if someObject == nil {
}
我认为===更像是确保实例完全相同(基本上比较指针),而==更像是一个等质量检查。因此,我认为===更适合针对nil进行测试,但我显然是不正确的

文件规定:

==或“等同于”表示两个类类型的常量或变量 引用完全相同的类实例

==或“等于”表示两个实例被视为“相等”或“等效” 在值中,对于“equal”的某些适当含义,由类型的设计者定义


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

等效的类实例,它的工作原理与您期望的完全相同:

var s: String? = nil
s === nil // true
唯一需要注意的是,与
nil
相比,您的变量必须能够是
nil
。这意味着它必须是可选的,用
表示


var s:String
不允许为
nil
,因此当
===
nil
相比,以下内容适用于我
类Person{}let p=Person()let q:Person?=nil println(p==nil)println(q==nil)
该对象的值为nil,而不是引用与nil完全相同的对象,这是===的意思。还有一个警告-它必须是类类型的可选。例如,不是
Int?
。这很有道理。非常感谢您的回答。@Sulthan您能解释一下您的陈述吗?Int不是类类型吗?@Boon在Swift中,有类类型(class)和值类型(structs、enum)
Int
不是类类型,而是值类型
=
运算符仅为类类型定义(也为
数组定义,但这是一种特殊情况)。因此,您不能将
==
用于
Int
变量。谢谢Sulthan。你说数组是一种特殊情况,你是说数组是一种与==一起工作的值类型吗?