Используй @State переменные или свойства view model для отслеживания состояния ошибки внутри твоих представлений. Типичный паттерн включает хранение опциональной ошибки и булевого флага для управления видимостью:
@State private var errorMessage: String?
@State private var showError = false
Выбери стратегию отображения в зависимости от серьёзности и контекста:
.alert(isPresented:) для критичных, блокирующих ошибокОборачивай функции, выбрасывающие исключения, в стандартный блок do-catch, затем присваивай перехваченную ошибку своему свойству состояния, чтобы вызвать обновление UI.
Внутри блоков Task используй do-catch для перехвата ошибок от вызовов async/await. Всегда отправляй обновления UI на main actor, чтобы избежать проблем с тредами:
Task {
do {
try await loadData()
} catch {
await MainActor.run {
errorMessage = error.localizedDescription
showError = true
}
}
}
Для больших приложений избегай дублирования логики обработки ошибок в каждом представлении. Вместо этого введи выделенный сервис обработки ошибок — обычно ObservableObject — пробрасываемый через окружение. Это даёт:
Такой многоуровневый подход — локальное состояние для простых случаев, общий сервис для сложных — гарантирует как гибкость, так и единообразный пользовательский опыт при масштабировании.
При обработке ошибок в асинхронных задачах ты всегда должен использовать MainActor.run для отправки обновлений UI, даже если изменение состояния ошибки происходит в фоновом потоке.
Новый — ещё не проверен сообществом
Вы