Custom Operators

장주명·2021년 5월 19일

Operators

목록 보기
11/11

기존에 없던 연산자를 새롭게 만들어 주는것으로 가장먼저 연산자를 선언하고 모든 스콥에서 인식할수 있도록 Gobal Scope에서 선언한다. 앞이면 prfix 뒤면 postfix 사이에 생기면 infix를 선언합니다.

Reserved Tokens

(, ), {, }, [, ], ., ,, :, ;, =, @, #, &(prefix operator), ->, `, ?, !(postfix operator)

여기있는 문자는 항상 단독으로 사용이 불가능하며 항상 다른 문자와 조합하여 사용되어야한다.

First Character

/, =, -, +, !, *, %, <, >, &, |, ^, ?, ~

여기에 있는 문자중 하나를 가장 첫번째 문자로 사용되어야한다. 하지만 여기에 나열된 문자로만 만드는것이 가독성을 높이는데 유용하다.

규칙

  1. 연산자를 가능한 단순한 형태로 선언해야한다.
  2. 기존에 있던 연산자와 함께 선언했을때 모호함이 없도록 해야한다.

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

profile
flutter & ios 개발자

0개의 댓글