Создать структуру Hashable?

Я пытаюсь создать словарь сорта [petInfo : UIImage](), но получаю ошибку Type 'petInfo' does not conform to protocol 'Hashable'. Моя структура petInfo такова:

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

Поэтому я хочу каким-то образом сделать его хешируемым, но ни один из его компонентов не является целым числом, которое требуется var hashValue: Int. Как я могу привести его в соответствие с протоколом, если ни одно из его полей не является целым числом? Могу ли я использовать dbName, если я знаю, что он будет уникальным для всех вхождений этой структуры?

Ответ 1

Просто верните dbName.hashValue из вашей функции hashValue. FYI - значение хэша не обязательно должно быть уникальным. Требование состоит в том, чтобы два объекта, равных равным, также должны иметь одинаковое значение хеша.

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