В Swift в словаре (Dictionary) в качестве ключа может использоваться любой тип, соответствующий протоколу Hashable.
Протокол Hashable наследуется от протокола Equatable.
==, позволяющего проверить, являются ли два экземпляра типа равными.hashValue (в старых версиях Swift) или вызова метода hasher.combine() в методе hash(into:), который предоставляет уникальное целое число для каждого экземпляра типа. Это хеш-значение используется для быстрого поиска элементов в словаре.Большинство стандартных типов Swift, таких как String, Int, Double, Bool, Array и Set (если их элементы также Hashable), уже соответствуют протоколу Hashable по умолчанию.
Для пользовательских типов (структур, классов, перечислений), чтобы использовать их в качестве ключей словаря, необходимо явно обеспечить их соответствие протоколу Hashable. Для структур и перечислений с ассоциативными значениями, поля которых также Hashable, соответствие Hashable может быть синтезировано компилятором автоматически при добавлении декларации Hashable. Для классов может потребоваться ручная реализация hash(into:).
Пример структуры, соответствующей Hashable:
swift