运算符重载让Swift类型可以自定义运算符的含义,增强了语言的表现力。
重载基础运算符
可以通过重载的方式自定义基础操作符在该类型上的含义:
struct Vector {
var x = 0.0, y = 0.0
static func + (left: Vector, right: Vector) -> Vector {
return Vector(x: left.x + right.x, y: left.y + right.y)
}
}
let vector = Vector(x: 3.0, y: 1.0)
let anotherVector = Vector(x: 2.0, y: 4.0)
let combinedVector = vector + anotherVector // 向量相加
这里重载了+运算符来实现两个向量的相加。
重载复合赋值运算符
可以重载复合赋值运算符(+=、-=等)的实现:
struct Point {
var x = 0.0, y = 0.0
static func += (left: inout Point, right: Vector) {
left.x += right.x
left.y += right.y
}
}
var point = Point()
let vector = Vector(x: 3.0, y: 1.0)
point += vector
自定义运算符
可以定义自定义的运算符,并通过operator关键字重载:
infix operator +\ : AdditionPrecedence
extension Vector {
static func +\ (left: Vector, right: Vector) -> Vector {
// 自定义运算符实现
}
}
运算符重载让Swift类型使用起来更加直观。但也要适当使用,避免降低代码可读性。