I'm trying to create a dictionary of the sort [petInfo : UIImage]()
but I'm getting the error Type 'petInfo' does not conform to protocol 'Hashable'
. My petInfo struct is this:
struct petInfo {
var petName: String
var dbName: String
}
So I want to somehow make it hashable but none of its components are an integer which is what the var hashValue: Int
requires. How can I make it conform to the protocol if none of its fields are integers? Can I use the dbName
if I know it's going to be unique for all occurrences of this struct?
Simply return dbName.hashValue
from your hashValue
function. FYI - the hash value does not need to be unique. The requirement is that two objects that equate equal must also have the same hash value.
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
}
}
As of Swift 5 var hashValue:Int
has been deprecated in favour of func hash(into hasher: inout Hasher)
(introduced in Swift 4.2), so to update the answer @rmaddy gave use:
func hash(into hasher: inout Hasher) {
hasher.combine(dbName.hashValue)
}
来源:https://stackoverflow.com/questions/41972319/make-struct-hashable