Программирование
Swift 6.4: наконец-то кажется, что Apple прислушалась
В Swift 6 нужно было доказать, что безопасность конкурентности вообще можно реализовать. Swift 6.4 — уже про то, как сделать эту безопасность удобной в повседневной работе.
Большую часть прошлого года я боролся с атрибутами @available, которые растягивались сразу на пять платформ, и с асинхронными функциями, где код очистки приходилось дублировать в трёх местах «на случай, если что-то выбросит ошибку». Теперь понятно, о чём я говорил, когда тогда вляпался в эту проблему — Swift 6.4 тихо исправил обе эти головные боли и ещё несколько вещей, которые тормозили меня, хотя я даже не замечал этого, пока они не исчезли.
Подождите, мы же только что выпустили Swift 6
Да. В релизном цикле 2026 года Apple фактически выпустила две версии — Swift 6.3 в начале года, а затем Swift 6.4 вместе с сессией WWDC26 «What’s New in Swift», охватившей обе версии как единый длинный этап развития языка. Раньше вы могли отказаться от перехода на строгую конкурентность из-за перегрузки аннотациями, но теперь к этой миграции действительно стоит вернуться.
Исправляем главное: больше не нужно прокручивать простыню проверок доступности
Эта проблема особенно хорошо знакома тем, кто поддерживает iOS, macOS, watchOS, tvOS и visionOS.
// Before Swift 6.4 — five platforms, one function
@available(macOS 27, iOS 27, watchOS 27, tvOS 27, visionOS 27, *)
func showStatus() {
// ...
}
В Swift 6.4 появился новый anyAppleOS — сокращение, позволяющее указать все пять платформ одним атрибутом доступности.
// After Swift 6.4
@available(anyAppleOS 27, *)
func showStatus() {
// ...
}
Именно в эту стену я упёрся в прошлом месяце, когда делал простое приложение-компаньон для Apple Watch — у половины моих view model проверки доступности были длиннее тела самой функции. Эта проблема вполне реальна, и уже одного этого изменения достаточно, чтобы обновление имело смысл.
Async defer для очистки ресурсов — наконец-то
Вот это изменение радует меня больше всего. SE-0493 наконец позволяет использовать блоки defer внутри асинхронных функций. Раньше, если нужно было асинхронно освободить ресурс, приходилось либо запускать отдельную detached-задачу, либо повторять код очистки во всех возможных точках выхода.
func fetchData() async throws -> Data {
let connection = try await open()
defer { await connection.close() } // guaranteed cleanup
return try await connection.read()
}
- Больше не нужно запускать отдельные detached-задачи только ради закрытия сокета.
- Теперь в асинхронном коде можно пользоваться теми же гарантиями очистки, которым мы давно доверяем в синхронном коде.
Меньше церемоний, та же безопасность
Swift 6 обещал надёжную изоляцию данных, но вместе с ней пришло и множество аннотаций. Swift 6.4 усиливает эти гарантии изоляции и одновременно сокращает объём шаблонного кода — больше безопасности, меньше церемоний. Здесь тоже важны мелочи, которые в сумме сильно влияют на разработку. Например, раньше для optional existential-типа требовались скобки, а теперь можно писать any Int? вместо (any Int)?.
Итерация без налога на копирование
Появился новый протокол Iterable, существующий рядом со старым Sequence. Главное отличие связано с владением данными: последовательность копирует элементы из коллекции, а iterable заимствует их. Это закрывает реальную дыру для тех, кто работает с некопируемыми типами или просто пытается выжать максимум производительности из критичных внутренних циклов.
Тестовые фреймворки наконец умеют общаться друг с другом
Если часть вашей команды всё ещё использует XCTest, а другая уже перешла на Swift Testing, новая совместимость позволяет вызывать API одного фреймворка внутри теста, написанного с использованием другого. То есть больше не нужно мигрировать весь набор тестов одним огромным рывком, словно каждый год наступает канун Рождества и всё нужно успеть за ночь.
Почему это важно
Здесь нет ничего особенно эффектного. Нет нового типа представления SwiftUI, нет очередной ИИ-функции. Но это и не ломающий релиз — это именно тот тип обновления, ради которого хочется перейти на новую версию, особенно если:
- вы поддерживаете несколько платформ Apple;
- пишете сетевой или базовый код с большим количеством
async; - всё ещё находитесь в процессе перехода на строгую конкурентность;
- избегали Swift Testing из-за большого наследия на XCTest.
Главный вывод
В Swift 6 нужно было доказать, что безопасность конкурентности вообще можно реализовать. Swift 6.4 — уже про то, как сделать эту безопасность удобной в повседневной работе. Если вы пропустили Swift 6.0 из-за «налога на аннотации», то именно эта версия может наконец сделать миграцию достойной потраченных выходных.
-
Новости4 недели назадВидео и подкасты о мобильной разработке 2026.35
-
GitHub3 недели назадLucide Swift — типобезопасные Lucide иконки с векторным рендерингом
-
Устройства4 недели назадHugging Face представил Microduck — небольшого двуногого робота в форме утёнка
-
Разработка4 недели назадЗабавные анимации с меш-градиентами в Jetpack Compose 1.12
