Разработка
Что нового в SwiftUI после WWDC26
Эти улучшения делают SwiftUI более зрелым и дают нам ещё больше причин полагаться на него в production-приложениях.
Только что был опубликован доклад Platforms State of the Union, и у нас появилось много новых API, которые нужно изучить, исследовать и использовать для создания новых функций и приложений. Давайте начнем с самого важного фреймворка для наших приложений. На этой неделе мы рассмотрим, что WWDC26 привносит в новую версию SwiftUI.
Дизайн Liquid Glass претерпел несколько изменений, и, к счастью, SwiftUI автоматически внедряет многие из них. Вам не нужно писать дополнительный код для таких вещей, как оттенок стекла, поскольку они автоматически применяются к пользовательскому интерфейсу вашего приложения.
SwiftUI также добавляет новую роль вкладки — prominent. Её можно использовать для вкладок, отделённых справа, аналогично вкладке поиска.
TabView {
Tab("insights", systemImage: "chart.xyaxis.line") {
NavigationStack {
InsightsFeatureView()
.navigationTitle("insights")
}
}
Tab("awareness", systemImage: "text.book.closed") {
NavigationStack {
AwarenessView()
.navigationTitle("awareness")
}
}
Tab("create", systemImage: "pencil", role: .prominent) {
NavigationStack {
CreateFeatureView()
.navigationTitle("create")
}
}
}
Теперь модификатор swipeActions наконец-то можно использовать с любым контейнером представлений: List, ScrollView, ленивыми стеками и даже кастомными layout’ами. Больше не нужно использовать только List ради поддержки свайпов. Всё, что нужно, — новый модификатор swipeActionsContainer.
ScrollView {
LazyVStack {
ForEach(items) { item in
ItemRow(item)
.swipeActions {
Button("Delete", role: .destructive) {
delete(item)
}
}
}
}
}
.swipeActionsContainer()
Изменение порядка элементов с помощью перетаскивания стало проще, чем раньше, благодаря новому модификатору представления reorderContainer. Он также работает со списками (List), прокручиваемыми представлениями (ScrollView), ленивыми стеками и кастомными макетами. Просто примените модификатор представления reorderable и обработайте действие изменения порядка.
struct ContentView: View {
@State private var landmarks: [Landmark] = []
var body: some View {
VStack {
ForEach(landmarks) { landmark in
LandmarkView(landmark)
}
.reorderable()
}
.reorderContainer(for: Landmark.self) { difference in
difference.apply(to: &landmarks)
}
}
}
В навигации появился новый переход с перекрёстным затуханием, который можно использовать наряду с zoom. Мы по-прежнему не можем вручную управлять переходами в навигации, но теперь доступно больше встроенных вариантов: automatic, zoom и cross-fade.
struct ContentView: View {
@State private var showSheet = false
var body: some View {
VStack {
Button("Show Sheet") {
showSheet = true
}
.sheet(isPresented: $showSheet) {
Text("Sheet Content")
.presentationDetents([.medium])
.navigationTransition(.crossFade)
}
}
}
}
AsyncImage также получил улучшение производительности за счёт добавления кэширования. Более того, кэшем можно управлять: для этого нужно настроить собственный URLSession с заданным размером кэша.
let customCache = URLCache(
memoryCapacity: 20 * 1024 * 1024,
diskCapacity: 100 * 1024 * 1024,
directory: nil // Uses default system cache directory container
)
let configuration = URLSessionConfiguration.default
configuration.urlCache = customCache
let session = URLSession(configuration: configuration)
AsyncImage(
request: URLRequest(
url: imageURL,
cachePolicy: .reloadIgnoringLocalCacheData
)
)
.asyncImageURLSession(session)
Apple добавила набор новых модификаторов для тулбаров, которые позволяют точнее управлять видимостью панели инструментов. Теперь можно указывать, какие элементы тулбара должны иметь более высокий приоритет отображения на устройствах с небольшим экраном, скрывать второстепенные элементы в меню overflow и закреплять элемент в правой части верхней панели.
struct RootView: View {
var body: some View {
ContentView()
.toolbar {
ToolbarItem(placement: .topBarPinnedTrailing) {
SecondaryControl()
}
ToolbarItem {
PrimaryControl()
}
.visibilityPriority(.high)
ToolbarOverflowMenu {
Button("Action 1") { }
Button("Action 2") { }
}
}
}
}
Document-based приложения получили обновлённый внешний вид и улучшенную производительность. Похоже, Xcode уже начал использовать эти улучшения — возможно, именно поэтому в этом году Apple уделяет так много внимания работе с document-based приложениями. И наконец, в Xcode появились навыки SwiftUI Specialist и What’s New in SwiftUI для агентного программирования в Xcode.
SwiftUI продолжает двигаться в сторону более гибкого и глубоко интегрированного в систему фреймворка. Обновления этого года, возможно, не меняют радикально сам подход к разработке приложений, но они снимают множество небольших ограничений, связанных с контейнерами, навигацией, тулбарами и document-based сценариями.
Эти улучшения делают SwiftUI более зрелым и дают нам ещё больше причин полагаться на него в production-приложениях.
-
Видео и подкасты для разработчиков4 недели назадОт личной продуктивности к командной: сила шаблонизации в IDE
-
Новости4 недели назадВидео и подкасты о мобильной разработке 2026.20
-
Разработка3 недели назадГорячая перезагрузка AGSL-шейдеров без пересборки: пошаговое руководство для Compose
-
Новости3 недели назадВидео и подкасты о мобильной разработке 2026.21
