TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #482 654
🔢 Новые возможности Hashable в Swift 6.4

В Swift 6.4 добавили Hashable для нескольких типов стандартной библиотеки. Раньше их можно было сравнивать, но нельзя было использовать как ключи словаря или элементы в Set. Изменения небольшие, но убирают лишние преобразования и упрощают несколько паттернов.


Dictionary.Keys стал Hashable:

Свойство keys у словаря возвращает представление Dictionary.Keys. Раньше его можно было перебирать и сравнивать, но не использовать в Set или как ключ словаря.

Теперь это работает напрямую:


var knownSchemas: Set<[String: Any].Keys> = []
knownSchemas.insert(payload.keys)


Тип значения словаря не обязан быть Hashable. Ключи словаря уже имеют это требование, поэтому [String: Any].Keys получает соответствие.


Семантика равенства:

Два Dictionary.Keys равны, когда содержат одинаковые ключи. Значения словаря и порядок обхода не влияют на результат.


let first = ["id": 1, "name": 10]
let second = ["name": 20, "id": 2]

print(first.keys == second.keys) // true


Оба словаря содержат ключи id и name, поэтому их представления ключей равны.

Хеширование следует той же логике. Перестановка ключей не меняет хеш. Это работает, потому что порядок обхода словаря не является частью его идентичности.

Когда порядок важен, нужно использовать упорядоченную коллекцию:


let orderedKeys = dictionary.keys.sorted()



Когда это полезно:

Новое соответствие пригодится, когда набор полей важнее, чем значения под ними. Например приложение может отслеживать схемы динамических данных без создания отдельного Set для каждого словаря:


struct PayloadSchemaRegistry<Value> {
private var schemas: Set<Dictionary<String, Value>.Keys> = []

mutating func register(_ payload: [String: Value]) {
schemas.insert(payload.keys)
}

func contains(_ payload: [String: Value]) -> Bool {
schemas.contains(payload.keys)
}
}


Возможные сценарии: удаление повторяющихся структур данных, кеширование результатов по доступным полям, группировка метаданных по набору ключей, передача представлений ключей в обобщенные API, требующие Hashable.


🔗 Читать подробнее


💡 Вывод:

Dictionary.Keys: Hashable - самое полезное изменение. Оно позволяет представлениям ключей напрямую участвовать в Set, словарях и обобщенных API без промежуточных преобразований.

CollectionOfOne и EmptyCollection закрывают недостающие части обобщенной модели стандартной библиотеки.

UnownedTaskExecutor: Hashable решает более узкую задачу, но дает инфраструктуре конкурентности эффективный способ связывать ресурсы с идентификаторами исполнителей.

Главное правило не изменилось: если вы храните невладеющую ссылку на исполнителе, вы должны сами следить за тем, чтобы она не осталась висеть после того, как исполнитель завершил работу.


Подписаться на канал:
➡️ Telegram | Max
  • 👍 7
  • 🔥 3
  • ❤ 1
  • 🙏 1
  • 👀 1
More from @hardworkerit
  1. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  2. Sep 25, 2026🔢 Приватные свойства больше не ломают memberwise инициализатор в Swift 6.4 Swift автомати…
  3. Sep 24, 2026👨‍💻 Почему разработчики ненавидят своих менеджеров. Всем привет! Сегодня хочу разобрать…
  4. Sep 22, 2026🔢 Релиз Swift 6.4: главные изменения для разработчиков. Swift 6.4 вышел. Это обновление п…
  5. Sep 20, 2026📱 Официальный симулятор iPhone Duo уже доступен в Xcode 27.1 В бета-версии Xcode 27.1 поя…
  6. Sep 19, 2026🔨 Xcode переходит на JSON-формат проектов. В Xcode 27.2 компания Apple добавила новый фор…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →