El modificador .task
Cargue datos cuando aparezca una vista.
El modificador .task es una lección gratuita de SwiftUI Academy en CoddyKit. Esta es la lección 3 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.
Loading When a View Appears
Often you want to fetch data the moment a screen shows. The .task modifier runs async work exactly when the view appears. ⏱️
Attaching .task
Add .task to any view and give it an async closure. SwiftUI starts that work as the view comes on screen.
List(users) { user in Text(user.name) }
.task { await load() }It Calls Async Code
Inside .task you can freely use await. That makes it the natural home for your URLSession fetch on appearance.
.task {
users = try? await loadUsers()
}Why Not onAppear
The older onAppear cannot await async work directly. The .task modifier is built for concurrency, so prefer it for loading.
Automatic Cancellation
When the view disappears, SwiftUI cancels the task for you. That stops wasted work and avoids updating a gone view. ✨
Reacting to an id
Pass an id to .task and it reruns whenever that value changes. Perfect for reloading when a selection updates.
.task(id: selectedID) {
await loadDetail(selectedID)
}Updating State After Fetch
Store results in @State so assigning them refreshes the UI. The view redraws as soon as the data arrives.
@State private var users: [User] = []Handling Errors Inside
Wrap risky calls in do/catch inside the task. You can then set an error message that the view shows the user.
do { users = try await loadUsers() }
catch { errorText = "Failed" }Runs on the Main Actor
A .task closure starts on the main actor, so updating state and UI from it is safe without extra hopping.
One Task per Lifetime
By default .task runs once per appearance. For repeated refresh use pull-to-refresh or a changing id instead.
Keeping the Closure Small
Call a named function from .task rather than stuffing logic inline. It keeps the view tidy and easy to read.
.task { await viewModel.refresh() }Quick Check
Quick check on triggering async loads.
Recap: .task
You learned that .task runs async work when a view appears, cancels on disappear, can rerun on an id, and is the go-to place to fetch. 👍
Preguntas frecuentes
¿La lección «El modificador .task» es gratis?
Sí — el texto completo de «El modificador .task» 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 «El modificador .task»?
Cargue datos cuando aparezca una vista. 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 3 de 4.
¿Cuánto tiempo toma la lección «El modificador .task»?
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