在swift中,似乎有两个相等运算符:双等号(==)和三重等号(===),两者之间的区别是什么?
当前回答
在swift 3及以上
===(或!==)
检查两个值是否相同(都指向相同的内存地址)。 比较引用类型。 Like ==在Obj-C(指针相等)。
==(或!=)
检查值是否相同。 比较值类型。 就像Obj-C行为中的默认isEqual:一样。
这里我比较了三个实例(类是引用类型)
class Person {}
let person = Person()
let person2 = person
let person3 = Person()
person === person2 // true
person === person3 // false
其他回答
!==和===是标识符,用于确定两个对象是否具有相同的引用。
Swift还提供了两个标识操作符(===和!==),用于测试两个对象引用是否都引用同一个对象实例。
摘自:苹果公司《快速编程语言》。“iBooks。https://itun.es/us/jEUH0.l
在Swift中,我们有===符号,这意味着两个对象都引用同一个引用同一个地址
class SomeClass {
var a: Int;
init(_ a: Int) {
self.a = a
}
}
var someClass1 = SomeClass(4)
var someClass2 = SomeClass(4)
someClass1 === someClass2 // false
someClass2 = someClass1
someClass1 === someClass2 // true
例如,如果你创建一个类的两个实例,例如myClass:
var inst1 = myClass()
var inst2 = myClass()
你可以比较这些例子,
if inst1 === inst2
引用:
用于测试两个对象引用是否都引用 相同的对象实例。
摘自:苹果公司《快速编程语言》。“iBooks。https://itun.es/sk/jEUH0.l
==用于检查两个变量是否相等 2 == 2。但是在===的情况下,它代表相等,即如果两个实例引用同一个对象示例,在类的情况下,一个引用被创建,由许多其他实例持有。
只是一个与Any对象相关的小贡献。
我在NotificationCenter周围使用单元测试,它使用Any作为参数,我想比较是否相等。
但是,由于Any不能用于相等操作,因此有必要更改它。最终,我选择了以下方法,这让我在特定的情况下获得了平等,这里有一个简单的例子:
func compareTwoAny(a: Any, b: Any) -> Bool {
return ObjectIdentifier(a as AnyObject) == ObjectIdentifier(b as AnyObject)
}
这个函数利用了ObjectIdentifier,它为对象提供了唯一的地址,允许我进行测试。
关于每个Apple的ObjectIdentifier,有一点需要注意:
在Swift中,只有类实例和元类型具有唯一的标识。 对于结构体、枚举、函数或 元组。
推荐文章
- swift语言中的结构与类
- 我如何在Swift连接字符串?
- 我应该如何从字符串中删除所有的前导空格?- - - - - -斯威夫特
- Swift:理解// MARK
- Swift -转换为绝对值
- Swift编译器错误:“框架模块内的非模块化头”
- 从父iOS访问容器视图控制器
- NSRange从Swift Range?
- 我可以使用范围操作符与if语句在Swift?
- 在Swift中转换字符串为日期
- 点击按钮时如何打开手机设置?
- 在Swift中使用自定义消息抛出错误/异常的最简单方法?
- 编译器错误:带有Objective-C选择器的方法与前面带有相同Objective-C选择器的声明冲突
- 如何在Swift中获得唯一的设备ID ?
- 如何在Swift中获得枚举值的名称?