Unary operators overloading in Swift

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

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

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

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

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