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を返すだけです。 FYI - ハッシュ値は一意である必要はありません。同じことを示す2つのオブジェクトも同じハッシュ値を持つ必要があります。

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は等価に拡張されます。 '=='関数の詳細については、2つのプロトコルのドキュメントを参照してください。 – rmaddy

関連する問題