Site icon AppTractor

Swift 6.4: наконец-то кажется, что Apple прислушалась

Большую часть прошлого года я боролся с атрибутами @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()
}

Меньше церемоний, та же безопасность

Swift 6 обещал надёжную изоляцию данных, но вместе с ней пришло и множество аннотаций. Swift 6.4 усиливает эти гарантии изоляции и одновременно сокращает объём шаблонного кода — больше безопасности, меньше церемоний. Здесь тоже важны мелочи, которые в сумме сильно влияют на разработку. Например, раньше для optional existential-типа требовались скобки, а теперь можно писать any Int? вместо (any Int)?.

Итерация без налога на копирование

Появился новый протокол Iterable, существующий рядом со старым Sequence. Главное отличие связано с владением данными: последовательность копирует элементы из коллекции, а iterable заимствует их. Это закрывает реальную дыру для тех, кто работает с некопируемыми типами или просто пытается выжать максимум производительности из критичных внутренних циклов.

Тестовые фреймворки наконец умеют общаться друг с другом

Если часть вашей команды всё ещё использует XCTest, а другая уже перешла на Swift Testing, новая совместимость позволяет вызывать API одного фреймворка внутри теста, написанного с использованием другого. То есть больше не нужно мигрировать весь набор тестов одним огромным рывком, словно каждый год наступает канун Рождества и всё нужно успеть за ночь.

Почему это важно

Здесь нет ничего особенно эффектного. Нет нового типа представления SwiftUI, нет очередной ИИ-функции. Но это и не ломающий релиз — это именно тот тип обновления, ради которого хочется перейти на новую версию, особенно если:

Главный вывод

В Swift 6 нужно было доказать, что безопасность конкурентности вообще можно реализовать. Swift 6.4 — уже про то, как сделать эту безопасность удобной в повседневной работе. Если вы пропустили Swift 6.0 из-за «налога на аннотации», то именно эта версия может наконец сделать миграцию достойной потраченных выходных.

Источник

Exit mobile version