Search code examples
swiftdictionaryswift3hashable

Make struct Hashable?


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?


Solution

  • 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
        }
    }