Estados de carga y error
Muestre indicadores de carga y gestione los fallos correctamente.
Estados de carga y error es una lección gratuita de SwiftUI Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SwiftUI Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SwiftUI Academy incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
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. 🎯
Preguntas frecuentes
¿La lección «Estados de carga y error» es gratis?
Sí — el texto completo de «Estados de carga y error» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SwiftUI Academy, actualiza a CoddyKit PRO. El curso de SwiftUI Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Estados de carga y error»?
Muestre indicadores de carga y gestione los fallos correctamente. Practicas SwiftUI Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SwiftUI Academy?
No se requiere experiencia previa. SwiftUI Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Estados de carga y error»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SwiftUI Academy?
Sí. Cada lección de SwiftUI Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Decodificar JSON con Codable
- Llamar a APIs con URLSession
- El modificador .task
- Estados de carga y error