目录
1. 全局运算符重载
struct Point {
var x = 0, y = 0
}
// 全局的重载
func + (p1: Point, p2: Point) -> Point{
Point(x: p1.x + p2.x, y: p1.y + p2.y)
}
var p1 = Point()
p1.x = 10; p1.y = 20
var p2 = Point()
p2.x = 11; p2.y = 22
var p3 = p1 + p2
print(p3)
// 21 42
2. 局部重载
struct Point {
var x = 0, y = 0
// 局部运算符重载
static func +(p1: Point, p2: Point) -> Point{
Point(x: p1.x + p2.x, y: p1.y + p2.y)
}
}
var p1 = Point()
p1.x = 10; p1.y = 20
var p2 = Point()
p2.x = 11; p2.y = 22
var p3 = p1 + p2
print(p3)
// 21 42
3. 结构体遵守 Equatable 协议
struct Point : Equatable{
var x = 0, y = 0
}
var p1 = Point()
p1.x = 10; p1.y = 20
var p2 = Point()
p2.x = 11; p2.y = 22
print(p1 == p2)
// false
// 结构体遵守了系统的Equatable 协议, 如果属性都遵守了Equatable协议, 则, 编译器会自动实现 == 重载
// 如果该结构体的属性有一个没有遵守Equatable协议, 则需要手动实现 == 重载
// 再实现了 == 重载之后, 默认也实现了 != 重载, 编译器自动生成
4. 枚举 遵守Equatable协议
// 没有关联类型的枚举, 如果遵守了Equatable协议, 则编译器会自动生成 == 重载
// 如果有关联类型的枚举, 遵守了Equatable协议, 则需要手动实现 == 重载