struct Vector2D {↵
var x: Double↵
var y: Double↵
}↵
↵
func +(left: Vector2D, right: Vector2D) -> Vector2D {↵
return Vector2D(x: left.x + right.x, y: left.y + right.y)↵
}↵
↵
prefix operator +++↵
prefix func +++(vector: inout Vector2D) -> Vector2D {↵
vector = vector + vector↵
return vector↵
}↵
↵
infix operator **: MultiplicationPrecedence↵
func **(left: Vector2D, right: Double) -> Vector2D {↵
return Vector2D(x: left.x * right, y: left.y * right)↵
}↵
↵
var v1 = Vector2D(x: 3, y: 4)↵
let v2 = Vector2D(x: 1, y: 2)↵
print("Sum: (\((v1 + v2).x), \((v1 + v2).y))")↵
print("Scaled: (\((v1 ** 2).x), \((v1 ** 2).y))")↵
print("Doubled: (\((+++v1).x), \((+++v1).y))")