Connect with us

Разработка

Что нового в 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-приложениях.

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: