有了运算符重载,能简单的实现自定义对象的运算操作。如果还不够用,可以试试另一特性:自定义运算符
例如要定义一个+++的操作
新的运算符声明需在全局域使用operator关键字声明,可以声明为前置,中置或后置的。其中前置可以用@prefix修饰符,见代码:
operator prefix +++ {}
然后我们定义个向量结构体
struct Vector2D {
var x = 0.0
var y = 0.0
}
现在要实现+++的操作是把Vector2D里的x和y都乘以3
所以结果应该是
var toBeDoubled = Vector2D(x: 1.0, y: 4.0)
let afterDoubling = +++toBeDoubled //x=3,y=12
整理一下思路:
``` struct Vector2D { var x = 0.0 var y = 0.0 }
operator prefix +++ {}
@prefix @assignment func +++ (inout vector: Vector2D) -> Vector2D { vector = Vector2D(x: vector.x * 3, y: vector.y * 3) return vector; }
var toBeDoubled = Vector2D(x: 1.0, y: 4.0) let afterDoubling = +++toBeDoubled
```
相关修饰符有
@prefix:前置
@infix:中置
@postfix:后置
operator:自定义运算符定义符
@assignment:自赋值修饰符(见运算符重载)