Swift Operator Overloading代码详解

运算符重载让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类型使用起来更加直观。但也要适当使用,避免降低代码可读性。