2017-02-01 10 views
19

[petInfo : UIImage]() 사전을 만들려고하는데 오류가 발생했습니다. Type 'petInfo' does not conform to protocol 'Hashable'. 구조체를 Hashable로 설정 하시겠습니까?

struct petInfo { 
    var petName: String 
    var dbName: String 
} 

그래서 내가 어떻게 든 해쉬 만들고 싶어하지만, 그 구성 요소 중 어느 것도 var hashValue: Int이 요구하는 어떤 정수 없습니다 : 내 petInfo 구조체는 이것이다. 해당 필드가 정수가 아닌 경우 어떻게 프로토콜을 준수하게 할 수 있습니까? dbName을이 구조체의 모든 항목에 대해 고유하게 사용한다는 것을 알고 있다면 사용할 수 있습니까?

답변

29

hashValue 함수에서 dbName.hashValue을 단순히 반환하십시오. 참고 해시 값은 고유하지 않아도됩니다. 요구 사항은 같음을 나타내는 두 객체가 동일한 해시 값을 가져야한다는 것입니다.

struct PetInfo: Hashable { 
    var petName: String 
    var dbName: String 

    var hashValue: Int { 
     return dbName.hashValue 
    } 

    static func == (lhs: PetInfo, rhs: PetInfo) -> Bool { 
     return lhs.dbName == rhs.dbName && lhs.petName == rhs.petName 
    } 
} 
+0

잘 알고 있습니다. 당신이 추가 한'static func'을 설명해 주시겠습니까? – MarksCode

+0

Hashable은 Equatable을 확장합니다. '=='함수에 대한 자세한 설명은 두 프로토콜에 대한 문서를 참조하십시오. – rmaddy