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
}