运算符重载和自定义

一重载

类和结构体可以为现有的运算符提供自定义的实现。

注意:这个重载运算符属于类和结构体,所以是static的

struct Vector2D {
    var x = 0.0, y = 0.0
}

extension Vector2D {
    static func + (left: Vector2D, right: Vector2D) -> Vector2D {
        return Vector2D(x: left.x + right.x, y: left.y + right.y)
    }
}
let vector = Vector2D(x: 3.0, y: 1.0)
let anotherVector = Vector2D(x: 2.0, y: 4.0)
//两个Vectore2D类型的实例可以相加了
let combinedVector = vector + anotherVector
运算符分为三种
1前缀运算符
只有一个参数,运算符放在参数前面使用  如  &a
2中缀运算符
有两个参数,运算符放在中间使用   如 a + b
3后缀运算符
 只有一个参数,运算符放在参数后面使用    如  a!

二自定义

自定义运算符

在swift中还可以根据需要自定义运算符
语法: 新的运算符要使用operator 关键字在全局作用域内进行定义,同时还要指定prefix 、infix 或者postfi
x 修饰符:

prefix operator +++
//然后要使用这个运算符的类型,对其进行重载
extension Vector2D {
    static prefix func +++ (vector: inout Vector2D) -> Vector2D {
        vector += vector
        return vector
    }
}

var toBeDoubled = Vector2D(x: 1.0, y: 4.0)
let afterDoubling = +++toBeDoubled

你可能感兴趣的:(运算符重载和自定义)