Состояния загрузки и ошибок
Показывайте индикаторы загрузки и корректно обрабатывайте сбои.
«Состояния загрузки и ошибок» — бесплатный урок SwiftUI Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SwiftUI Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SwiftUI Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Every Fetch Has Phases
A real request moves through states: loading, success, and failure. Showing each one makes your app feel trustworthy. 🔄
Modeling State with an Enum
An enum captures each phase cleanly. The view then switches on it to decide exactly what to display.
enum Phase { case loading, loaded([User]), failed(String) }Showing a Spinner
While loading, show a ProgressView. This native spinner reassures users that something is happening behind the scenes.
ProgressView("Loading...")Switching on the Phase
Use a switch in your body to render a spinner, the data, or an error view based on the current phase.
switch phase {
case .loading: ProgressView()
case .failed(let msg): Text(msg)
case .loaded(let users): List(users)
}Catching the Error
Wrap the fetch in do/catch and move to the failed phase on error, storing a friendly message for the screen.
catch { phase = .failed("Could not load") }Friendly Error Messages
Avoid raw error text. Show a clear sentence the user understands, like "Check your connection and try again."
Offering a Retry
On failure, add a retry button that runs the fetch again. Letting users recover beats a dead-end error screen.
Button("Retry") { Task { await load() } }The Empty State
Success with no data deserves its own empty view, like "No results yet", so the screen never looks broken.
Setting Loading First
Move to the loading phase before awaiting. That instantly shows the spinner so the screen never feels frozen.
phase = .loading
phase = .loaded(try await loadUsers())Avoiding Flicker
For very fast responses, a tiny delay before hiding the spinner prevents a jarring flash of loading UI.
Wiring It to .task
Kick off the whole flow from .task, which sets loading, fetches, and lands on loaded or failed automatically.
.task { await load() }Quick Check
Quick check on handling request phases.
Recap: States
You now model fetches as loading, loaded, and failed, show a spinner and friendly errors with retry, and drive it all from .task. 🎯
Часто задаваемые вопросы
Урок «Состояния загрузки и ошибок» бесплатный?
Да — полный текст урока «Состояния загрузки и ошибок» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SwiftUI Academy, подпишись на CoddyKit PRO. Курс SwiftUI Academy содержит 4 уроков всего.
Чему я научусь в уроке «Состояния загрузки и ошибок»?
Показывайте индикаторы загрузки и корректно обрабатывайте сбои. Ты практикуешь SwiftUI Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SwiftUI Academy?
Предыдущий опыт не требуется. SwiftUI Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Состояния загрузки и ошибок»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SwiftUI Academy?
Да. Каждый урок SwiftUI Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Декодирование JSON с Codable
- Вызов API с URLSession
- Модификатор .task
- Состояния загрузки и ошибок