Swift 操作符

2020-09-07  本文已影响0人  gaookey

Swift 支持重载操作符这样的特性。可以直接重载像 +-* 这样的操作符,因为 Swift 中已经有定义了

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

let v1 = Vector2D(x: 2.0, y: 3.0)
let v2 = Vector2D(x: 1.0, y: 4.0)
//Vector2D(x: 3.0, y: 7.0)
let v3 = Vector2D(x: v1.x + v2.x, y: v1.y + v2.y)

重载加号操作符

func +(left: Vector2D, right: Vector2D) -> Vector2D {
    return Vector2D(x: left.x + right.x, y: left.y + right.y)
}
//Vector2D(x: 3.0, y: 7.0)
let v4 = v1 + v2

新加操作符的话,需要先对其进行声明,告诉编译器这个符号其实是一个操作符。

precedencegroup DotProductPrecedence {
    associativity: none
    higherThan: MultiplicationPrecedence
}

infix operator +*: DotProductPrecedence
func +* (left: Vector2D, right: Vector2D) -> Double {
    return left.x * right.x + left.y * right.y
}

//14.0
let v5 = v1 +* v2

摘录来自: 王巍 (onevcat). “Swifter - Swift 必备 Tips (第四版)。”

上一篇下一篇

猜你喜欢

热点阅读