
기존에 없던 연산자를 새롭게 만들어 주는것으로 가장먼저 연산자를 선언하고 모든 스콥에서 인식할수 있도록 Gobal Scope에서 선언한다. 앞이면 prfix 뒤면 postfix 사이에 생기면 infix를 선언합니다.
(, ), {, }, [, ], ., ,, :, ;, =, @, #, &(prefix operator), ->, `, ?, !(postfix operator)
여기있는 문자는 항상 단독으로 사용이 불가능하며 항상 다른 문자와 조합하여 사용되어야한다.
/, =, -, +, !, *, %, <, >, &, |, ^, ?, ~
여기에 있는 문자중 하나를 가장 첫번째 문자로 사용되어야한다. 하지만 여기에 나열된 문자로만 만드는것이 가독성을 높이는데 유용하다.

prefix operator +++
extension Int {
static prefix func +++(num : inout Int) { // 앞에서 선언해던 연산자를 사용하면된다.
num += 2
}
}
var a = 1
+++a
a // 3


우선순위는 이항 연산자를 선언할때 선언한다. 우선순위 그룹을 사용하거나 새로운 우선순위 그룹을 생성할수 있습니다. 적절한 우선순위를 정해주지않으면 다른 연산자와 사용시 컴파일 에러가 생긴다.
//이항 연산자
infix operator *+*: MyPrecedence // MultiplicationPrecedence을 사용시 곱하기 연산자와 동일한 우선순위
precedencegroup MyPrecedence {
higherThan : AdditionPrecedence // 더하기 빼기보다 더 높은 우선순위로 하겠다.
}
extension Int {
static func *+*(left : Int , right : Int) -> Int {
return (left * right) + (left * right)
}
}
1 *+* 2 // 4
2 *+* 3 + 3 // 컴파일 에러가 발생하는데 우선순위가 정해져 있지 않기떄문에 에러가 생긴다.
이럴때 우선순위를 정해줘야하는데 높은 순으로 우선순위를 정해준다.

우선순위 그룹의 정보 링크
https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations