Перегрузка операторов

class Point {
    var x: Int
    var y: Int

    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

//global function
prefix func ++ (p: inout Point) -> Point {
    p = Point(x: p.x + 1, y: p.y + 1)
    return p
}

//global function
postfix func ++ (p: inout Point) -> Point {
    p = Point(x: p.x + 1, y: p.y + 1)
    return p
}

//global function
prefix func - (p: Point) -> Point {
    let point = Point(x: -p.x, y: -p.y)
    return point
}

var p = Point(x: 1, y: 1)
let p1 = p++
//p.x is 2, p.y is 2
let p2 = ++p
//p.x is 3, p.y is 3
p = -p
//p.x is -3, p.y is -3
let p3 = -p
//p.x is 3, p.y is 3

print("x = \(p.x), y = \(p.y)")
print("x = \(p1.x), y = \(p1.y)")
print("x = \(p2.x), y = \(p2.y)")
print("x = \(p3.x), y = \(p3.y)")