Swift 等号运算符

本文描述 Swift == 和 === 的运算符的区别以及使用方式

Posted by Anyeler on January 23, 2017

简介】Swift 中有几个基本运算符需要注意的有 == 和 !=,=== 和 !== 这两对运算符的使用。


类和结构体

  • :属于一种==引用==类型,相当于有一个引用类型的指针引用(指向)了一块内存空间。在赋值操作中,==不会==发生类内存空间的==拷贝==
  • 结构体:属于一种==值==类型。在赋值操作中,==会==发生类内存空间的==拷贝==

运算符说明

  • “等价于===”表示两个类类型(class type)的常量或者变量引用同一个类实例。
  • “等于==”表示两个实例的值“相等”或“相同”,判定时要遵照设计者定义的评判标准,因此相对于“相等”来说,这是一种更加合适的叫法。

class a {
    var dd: Int?
}

class b {
    var cc: Int?
}

class c: a {
    var cc: Int?
}

let aa: a = a()
let cc: a = c()
let bb: b = b()
let aa1 = aa
let cc1: c = cc as! c

if aa === cc {
    print("相等")
} else {
    print("不相等")
}

if aa === aa1 {
    print("相等")
} else {
    print("不相等")
}

if cc === cc1 {
    print("相等")
} else {
    print("不相等")
}

输出结果为:

不相等 相等 相等


注意事项

  • == 和 === 操作运算符可以重写,也就是说可以根据不同的类改变其等价或者相等的规则。
  • 引用类型不能用 == 进行比较,除了重写其对应的运算符方法
  • 子类和父类可用 === 进行比较不过需要用 ==as==关键字转换为同一个类型

参考文档

Swift3.0中文文档