2016-07-07 4 views
3

구조체를 사전의 키로 사용하려고합니다. 코드는 신속한 2에서 작동하지만 그림 링크 에서처럼 신속한 3에서는 작동하지 않습니다.스위프트 3 : Equatable 함수를 작성하는 방법

Equatable Code : Picture

+2

코드를 이미지가 아닌 텍스트로 추가하십시오. –

+0

코드는 Swift 2에서도 작동하지 않습니다. 오류 메시지는 매우 명확합니다. ** 연산자는 전역 범위에서만 허용됩니다 ** – vadian

+0

@appzYourLife는 다음에 수행 할 것입니다 – selcuk

답변

3

은 스위프트 버전에 대해 아니에요. Swift 2에서도 오류가 발생합니다. 문제는 전역 함수 여야하므로 == 함수 을 Struct의 외부로 정의해야한다는 것입니다.

+0

감사합니다. 처음으로 Hashable, Equatable로 작업했습니다. 이제 멋지게 작동합니다. – selcuk

+0

@selcuk : [this] (http://stackoverflow.com/help/someone-answers)를 읽어보십시오. –

4

Hashable 프로토콜을 준수하는 Swift 유형도 Equatable 프로토콜을 준수해야합니다. Hashable 프로토콜은 Equatable 프로토콜 (source)에서 상속되기 때문에. 그래서 그 오류 메시지가 나타납니다.

귀하가 정의한 두 속성을 비교할 수 있도록 global == 연산자를 재정의하므로 == 함수가 전역 적으로 선언되어야합니다. Swift 3에서는 struct 자체에 ==를 정의 할 수도 있지만 정적이어야합니다.

struct Attributes: Hashable { 
    var uid: Int 
    var size: Size 
    var mimeType: mimeType 

    var hashValue: Int { 
     return uid 
    } 

    static func ==(lhs: Attributes, rhs: Attributes) -> Bool { 
     return lhs.size == rhs.size && lhs.mimeType == rhs.mimeType 
    } 
}