Swift в 2025 году: что нового? Эволюция языка для iOS и macOS
2025 год стал важной вехой для языка Swift. С момента своего появления в 2014 году Swift прошел путь от экспериментального языка до зрелого, мощного инструмента для разработки под экосистему Apple. В 2025 году мы видим не просто точечные улучшения, а фундаментальные изменения, которые делают Swift быстрее, безопаснее и удобнее. В этой статье мы разберем ключевые нововведения Swift 6.0 и последних обновлений, которые обязан знать каждый iOS/macOS разработчик.
1. Swift 6.0: Полная поддержка строгой модели параллелизма
Самое значительное событие 2025 года — выход Swift 6.0. Главная фишка релиза — включение строгой проверки параллелизма (Strict Concurrency Checking) по умолчанию. Это означает, что компилятор теперь гарантирует отсутствие гонок данных (data races) на этапе компиляции, а не только в рантайме.
Раньше разработчикам приходилось вручную следить за потоками и использовать @MainActor или DispatchQueue. Теперь компилятор сам анализирует, какие данные могут быть изменены из разных потоков, и выдает ошибку, если код небезопасен.
Пример: старая модель (может вызвать гонку данных)
class Counter {
var value = 0
func increment() {
value += 1 // Опасная операция без синхронизации
}
}
let counter = Counter()
DispatchQueue.concurrentPerform(iterations: 100) { _ in
counter.increment() // Гонка данных!
}
Пример: Swift 6.0 (строгая проверка)
class Counter {
var value = 0
func increment() {
value += 1 // Ошибка компиляции! value не изолирован
}
}
// Правильное решение: использовать акторы
actor SafeCounter {
var value = 0
func increment() {
value += 1 // Безопасно, так как актор изолирует состояние
}
}
let counter = SafeCounter()
Task {
await counter.increment() // Строгий контроль доступа
}
Это нововведение кардинально снижает количество багов в многопоточных приложениях и делает код более предсказуемым. Для проектов на SwiftUI это особенно актуально, так как большинство обновлений UI происходят на главном потоке, и Swift 6.0 помогает явно это контролировать.
2. Новые макросы: автоматизация рутины и кодогенерация
Макросы, введенные в Swift 5.9, получили мощное развитие в 2025 году. Теперь они стали полноценным инструментом для метапрограммирования. Разработчики могут создавать собственные макросы, которые генерируют код на этапе компиляции, экономя часы ручной работы.
Пример: макрос для автоматической генерации Equatable и Hashable
import Swift
// Объявление макроса
@attached(member, names: named(==), named(hash))
macro AutoEquatableHashable() = #externalMacro(module: "MyMacros", type: "AutoEquatableHashableMacro")
// Применение макроса
@AutoEquatableHashable
struct User {
let id: Int
let name: String
let email: String
}
// Компилятор автоматически сгенерирует методы:
// func == (lhs: User, rhs: User) -> Bool { ... }
// func hash(into hasher: inout Hasher) { ... }
В 2025 году также появились макросы для работы с сетью. Например, макрос @RESTClient может автоматически сгенерировать код для HTTP-запросов на основе протокола:
@RESTClient(baseURL: "https://api.example.com")
protocol UserAPI {
@GET("/users/{id}")
func getUser(id: Int) async throws -> User
@POST("/users")
func createUser(_ user: User) async throws -> User
}
// Теперь можно просто вызвать:
let api = UserAPI()
let user = try await api.getUser(id: 42)
Это значительно ускоряет разработку и уменьшает количество шаблонного кода.
3. SwiftUI 2025: Реактивность без усилий
Фреймворк SwiftUI в 2025 году получил долгожданные улучшения производительности и новые компоненты. Главные новинки:
- Observation макрос (уже в iOS 17+) — стабильная и быстрая реактивность. В 2025 году он стал стандартом де-факто. Вместо
@StateObjectи@ObservedObjectтеперь используется@Observable. - Новый компонент
NavigationStack— полностью переработанная навигация, которая работает быстрее и предсказуемее. - Улучшенная работа с анимациями — появился ключевой фреймворк
SwiftUI Animation Phases, позволяющий создавать сложные, управляемые анимации без сторонних библиотек.
Пример: использование @Observable в SwiftUI 2025
import SwiftUI
@Observable
class ViewModel {
var count = 0
var items: [String] = []
}
struct ContentView: View {
@Bindable var model = ViewModel()
var body: some View {
VStack {
Text("Счет: \(model.count)")
Button("Увеличить") {
model.count += 1
}
List(model.items, id: \.self) { item in
Text(item)
}
}
.task {
// Загрузка данных
model.items = ["Swift", "iOS", "macOS"]
}
}
}
SwiftUI 2025 также стал более дружелюбным к Swift 6.0: все обновления UI теперь автоматически проверяются на безопасность потоков, что исключает вылеты приложения из-за неверного обновления интерфейса.
4. Обновления Foundation и Swift Testing
Помимо языка и UI, в 2025 году произошли важные изменения в стандартной библиотеке и инструментах тестирования.
Swift Foundation теперь полностью переписан на Swift (без использования Objective-C runtime). Это дало прирост производительности до 30% на операциях с датами, строками и коллекциями. Также появилась поддержка форматирования чисел и дат по новым стандартам Unicode.
Swift Testing — новый фреймворк для модульного тестирования, который пришел на смену XCTest. Он предлагает:
- Более лаконичный синтаксис.
- Встроенную поддержку асинхронных тестов.
-
Блоги
Рекомендаций по книгам
Читайте также