Что нового в Swift 6.1?

Swift 6.1 официально выпущен! В этой версии представлены новые возможности языка, улучшения диагностики, поддержка package traits, а также продолжается работа над удобством обеспечения потокобезопасности и сокращением времени компиляции. Ниже мы рассмотрим ключевые нововведения в языке, пакете и инструментах.

Улучшения языка и стандартной библиотеки

📌 Конкурентность (Concurrency)

Swift 6.1 расширяет использование nonisolated. Теперь это ключевое слово можно применять не только к отдельным свойствам и методам, но и ко всему типу или расширению. Это позволяет исключить автоматическую привязку к @MainActor и не дублировать nonisolated в каждом методе:

@MainActor struct S { let id: Int let name: String } nonisolated extension S: CustomStringConvertible, Equatable { var description: String { "id: \(id), name: \(name)" } static func ==(lhs: S, rhs: S) -> Bool { lhs.id == rhs.id } }

Также улучшена типизация в withTaskGroup, теперь Swift сам выводит тип результата, и его больше не нужно указывать явно:

let messages = await withTaskGroup { group in for id in ids { group.addTask { await downloadMessage(for: id) } } var messages: [Message] = [] for await message in group { messages.append(message) } return messages }

🧩 Реализация Objective-C в Swift

Добавлен новый атрибут @implementation, который позволяет реализовать Objective-C классы или категории в Swift, сохраняя совместимость и упрощая миграцию:

@objc @implementation extension MyClass { func someMethod() { ... } }

💡 Повышение продуктивности

Swift 6.1 расширяет поддержку висячих запятых — теперь их можно использовать не только в массивах, но и в кортежах, списках параметров и замыканиях:

let tuple = (1, 2, 3, ) let closure = { [weak self, ] in ... }

Это особенно полезно для авто-генерации кода плагинами и макросами.

📦 Улучшения Swift Package Manager

Swift 6.1 представляет package traits — механизм условной конфигурации пакетов в зависимости от окружения (например, Embedded Swift или WebAssembly):

.package( url: "https://github.com/Org/SomePackage.git", from: "1.0.0", traits: [.default, "Embedded"] )

Также включен фоновый индекс SourceKit-LSP, что ускоряет навигацию по коду даже без полной сборки проекта.

🧪 Swift Testing

Добавлена поддержка настраиваемых трейтов для тестов, позволяющая внедрять логику до и после выполнения тестов:

struct MockAPICredentialsTrait: TestTrait, TestScoping { func provideScope(...) async throws { ... } }

Также обновлены макросы #expect(throws:) и #require(throws:), теперь они возвращают перехваченные ошибки — это упростит отладку.

📚 Swift-DocC

В документации теперь проще ссылаться на перегруженные методы — можно использовать типы параметров и возвращаемого значения вместо нечитаемых хэшей:

See `doSomething(first: String?, second: Int) -> Double` for more.

Это упрощает написание и поддержку документации.

📥 Установка Swift 6.1

Swift 6.1 включён в Xcode 16.3, доступный в Mac App Store. Также вы можете установить его отдельно через менеджер версий swiftly, работающий на macOS и Linux. Подробнее — на странице Install Swift.

1
Начать дискуссию