Структура или класс должны быть хэшируемыми. Для структуры или класса, содержащего только хэшируемые типы (например, Int, String, Bool), компилятор автоматически синтезирует реализацию протокола Hashable. Если структура или класс содержат нехэшируемые типы или требуют специальной логики хэширования, необходимоL
Hashable.hash(into:) добавить хэшируемые компоненты экземпляра в предоставленный хэшер.swift
Необходимо также реализовать протокол Equatable, поскольку Hashable наследует от Equatable. Компилятор синтезирует реализацию Equatable для структур, чьи свойства также Equatable. Для классов или структур с не-Equatable свойствами (или для особой логики сравнения), требуется ручная реализация ==.