콘텐츠로 건너뛰기
Home » protocol and operator

protocol and operator

프로토콜과 연산자

Equatable과 같은 프로토콜은 메소드가 아닌 연산자에 의한 연산을 정의한다. 보통 프로토콜은 특정 타입이 구현해야 하는 메소드나 프로퍼티를 정의하는 것인데, 연산자에 의한 연산은 어떻게 정의할 수 있을까?

연산자는 특별한 종류의 함수이다. 연산자는 연산자의 이름이 될 수 있는 특별한 패턴이 있으므로 프로토콜 내에서 정의되었을 때 연산자로 인지하게 된다.

수정 (2016-10-04) : 프로토콜이 특정 연산자의 기능을 선언하거나 오버로드하는 경우, 이를 구현하는 타입의 정의 내에서 일반 메소드와 마찬가지로 연산자 오버로딩을 작성할 수 있다.

infix operator ~~= { associativity left }
protocol Eq {
    func ~~=(a:Self, b:Self) -> Bool
}
struct Coord: Eq {
    var x: Double
    var y: Double
}
func ~~= (a:Coord, b:Coord) {
    return a.x == b.x && a.y == b.y
}