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