Equatable и Hashable — это фундаментальные протоколы Swift, используемые для эффективного сравнения и организации значений.
Протокол Equatable позволяет сравнивать два экземпляра на равенство с помощью оператора ==.
static func == (lhs: Self, rhs: Self) -> Bool
Протокол Hashable расширяет Equatable, добавляя хеш-значение каждому экземпляру.
Sethash(into:):func hash(into hasher: inout Hasher)
Equatable отвечает на вопрос: «Равны ли эти два значения?»Hashable отвечает на вопрос: «Где это значение должно храниться в хеш-коллекции?»Каждый тип Hashable также является Equatable, но не каждый тип Equatable должен быть Hashable.
Swift автоматически синтезирует соответствие обоим протоколам для типов struct и enum, при условии что все хранимые свойства или связанные значения уже соответствуют им.
Когда ты предоставляешь собственную реализацию Hashable, ты должен соблюдать следующий инвариант:
Нарушение этого правила приводит к неопределённому поведению в коллекциях типа Set или Dictionary.
Тип может соответствовать Hashable без соответствия Equatable, если он реализует метод hash(into:).
Новый — ещё не проверен сообществом
Вы