В Swift ключи в словаре (
Dictionary) должны быть уникальными и сравниваться между собой. Поэтому, если вы хотите использовать*свою структуру в качестве ключа, она должна соответствовать протоколу Hashable. 🚩Что нужно?
Структура должна соответствовать
Hashable Должен быть реализован
hash(into:) или использовать Equatable + Hashable автоматически Свойства структуры должны быть
Hashable (если String, Int, Double – все ок) 🚩Пример кастомной структуры в `Dictionary`
struct Person: Hashable {
let id: Int
let name: String
}
// Теперь можно использовать `Person` как ключ
var peopleAges: [Person: Int] = [
Person(id: 1, name: "Alice"): 25,
Person(id: 2, name: "Bob"): 30
]
// Доступ по ключу
let alice = Person(id: 1, name: "Alice")
print(peopleAges[alice] ?? "Не найдено") // 25🚩Ручная реализация `hash(into:)`
Если нужно кастомное хеширование, можно реализовать
hash(into:):struct Person: Hashable {
let id: Int
let name: String
func hash(into hasher: inout Hasher) {
hasher.combine(id) // Используем только id для хеша
}
}Ставь 👍 и забирай 📚 Базу знаний