Вопрос проверяет знание контрактов Dictionary и понимание работы хэш-таблиц в Swift.
Ключи в Dictionary должны соответствовать протоколу Hashable. Это означает, что для них определены корректные hash и сравнение на равенство. Одинаковые ключи должны иметь одинаковый хэш. Без выполнения этих условий словарь не сможет корректно работать.
Dictionary в Swift реализован как хэш-таблица, поэтому к ключам предъявляются строгие требования.
Определение: ключ словаря обязан соответствовать протоколу Hashable.
Это включает два обязательных аспекта:
реализацию hash(into:)
корректную реализацию Equatable
HashableКлючевые правила:
Если a == b, то их hash должен быть одинаковым
Обратное не обязательно
Хэш должен быть стабильным на время жизни ключа в словаре
struct UserID: Hashable {
let id: Int
}
Если поле, участвующее в hash, изменится после добавления в словарь — поведение станет некорректным.
использовать изменяемые свойства в ключе
нарушать равенство и хэширование
менять ключ после вставки
Ключ словаря должен быть неизменяемым и корректно реализовывать Hashable, иначе Dictionary теряет корректность работы.