+ 와 - 같은 연산자들을 직접 만들어 사용해 볼 거에요
infix: 사이에 연산자가 있는경우 ( 3 + 3 )
prefix: 앞에 연산자가 있는경우 ( ++3 )
postfix: 뒤에 연산자가 있는경우 ( 3++ )
이 3가지중 하나를 골라서 먼저 정의를 해줘야해요
postfix operator ====
그리고 연산자에서 중요한게 우선순위가 있어요
+와 *가 같이있다면 *부터 계산되는 그런 우선순위와 (서로다른 우선순위간의 계산)
같은순위의 연산자 -, + 사이에는 어느것 부터 계산되어야하는지도 중요하죠 (같은 우선순위간의 계산)
precedencegroup 이라는 키워드를 이용해서 우선순위를 만들어 줄 수 있어요
옵션에는
associativity: 우선순위가 같은 연산자들의 처리 방식으로 left/right중 선택
higherThan: 보다 우선순위가 높다
lowerThan: 보다 우선순위가 낮다
~Than에는 옵션들이 여러개 있어요 대표적으로
TernaryPrecedence: 삼항연산자 우선순위
AdditionPrecedence: 덧셈 우선순위
MultiplicationPrecedence: 곱셈 우선순위
가 잇어요
예를들어
higherThan: AdditionPrecedence
이렇게 정의했다면 이 연산자는 덧셈 우선순위보다 높은거에요
덧셈보다 먼저 실행되는 연산자죠
그다음에 해당하는 연산자에 대한 실행할 로직을 함수로 만들어 주면돼요
infix 연산자는 함수앞에 키워드가 안붙지만
다른것들은 붙여야하구요
/// associativity: 우선순위가 같은 연산자들의 처리 방식, left/right중 선택
/// precedencegroup: 우선순위
/// higherThan: AdditionPrecedence 덧셈
/// higherThan: MultiplicationPrecedence 곱셈
/// lowerThan: 보다 우선순위낮게
precedencegroup CustomPrecedence {
associativity: left
higherThan: TernaryPrecedence // 삼항 연산자
}
postfix operator ====
prefix operator !!!!
infix operator ++++: CustomPrecedence
func ++++(lhs: Int, rhs: Int) -> Int {
return lhs * 2 + rhs * 2
}
prefix func !!!!(rhs: Int) -> Int {
return rhs * rhs
}
postfix func ====(lhs: Int) -> Int {
lhs * lhs
}
print(2++++4)
print(!!!!3)
print(4====)
/* Print
12
9
16
*/
잘 동작하는 것을 볼 수 있어요
복잡한 계산들을 미리 정의해두어서 연산자로 간단하게 사용할 때 편리할 것 같네요
'iyOmSd > Title: Swift' 카테고리의 다른 글
[Swift] 전처리문 #if DEBUG (0) | 2021.01.04 |
---|---|
[Swift] DateFormatter 년도차이 YYYY vs yyyy (2) | 2021.01.02 |
[Swift] AVFoundation 카메라 만들어보기(기초) (0) | 2020.12.24 |
[Swift] Socket 라이브러리 비교 CocoaAsyncSocket vs Socket.IO (0) | 2020.12.23 |
[Swift] AutoLayout 코드작성방법 (Visual Format Language, NSLayoutAnchor, NSLayoutConstraint) (0) | 2020.11.27 |