2017-02-01 19 views
19

[petInfo : UIImage]() sıralamasında bir sözlük oluşturmaya çalışıyorum ancak Type 'petInfo' does not conform to protocol 'Hashable' hatasını alıyorum. Yapısal hale getirilsin mi?

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

Yani nasılsa hashable yapmak istiyorum ama onun bileşenlerinin hiçbiri var hashValue: Int gereği budur bir tamsayı şunlardır: My petInfo yapı budur. Alanlarının hiçbiri tamsayı değilse, protokolle nasıl uyumlu hale getirebilirim? Bu yapının tüm oluşumları için benzersiz olacağını bildiğim dbName kullanabilir miyim?

cevap

29

dbName.hashValue ürününü hashValue işlevinden döndürün. FYI - karma değerinin benzersiz olması gerekmez. İhtiyacı eşitleyen iki nesnenin de aynı karma değere sahip olması gerekir.

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

Oh bilmek güzel! Eklediğiniz statik func şeyini açıklıyor musunuz lütfen? – MarksCode

+0

Hashable genişletilebilir. '==' işlevinin tam açıklaması için iki protokolün belgelerine bakın. – rmaddy

İlgili konular