Modificador task

Cuando trabajamos con SwiftUI, a menudo necesitamos ejecutar código asíncrono antes de que nuestra vista aparezca. Para ello, podemos utilizar el modificador .task(priority:_:).

A continuación, se muestra un ejemplo simple de cómo usar este modificador:

struct MyView: View {
var body: some View {
Text("Hola mundo")
.task {
await fetch()
}
}
...

En este caso, se utiliza el modificador .task y dentro se llama a la función asíncrona fetch(). Gracias a este modificador, no es necesario colocar el código dentro de un Task. Para ilustrar esto, veamos cómo podemos hacer algo similar sin usar el modificador:

struct MyView: View {
var body: some View {
Text("Hola mundo")
.onAppear {
Task {
await fetch()
}
}
}
...

Este código hace virtualmente lo mismo, sin embargo, hay una diferencia fundamental. Si, por ejemplo, navegamos a otra vista y luego volvemos a la vista inicial, onAppear(perform:) se ejecutará nuevamente, pero el código dentro del modificador .task no. Dentro de .task, cualquier tarea en ejecución se cancelará automáticamente cuando la vista desaparezca, lo que ayuda a evitar el desperdicio de memoria y procesador.

Estableciendo la prioridad

Cuando usamos .task, podemos indicar la prioridad que tendrá el código, para que así el sistema pueda determinar cuándo ejecutarlo.

Para indicar la prioridad, podemos hacer lo siguiente:

.task(priority: .utility) {
await fetch()
}

En este caso utilizamos la prioridad utility. Si deseas saber más sobre esto, puedes leer el artículo: ¿Qué es un Task?.

Usando id para ejecutar la tarea

Otro parámetro muy útil que podemos utilizar es id. Con este, podemos indicar que deseamos que el código dentro de .task se ejecute cada vez que el valor de una variable cambie.

struct MyView: View {
@State var runTask: Bool = false
var body: some View {
Text("Hola mundo")
.task(id: runTask) {
await fetch()
}
}
...

Con este código, cada vez que runTask cambie de valor, se ejecutará el código dentro del modificador .task. Hay que tomar en cuenta que, para poder usar la variable, esta debe conformar al protocolo Equatable.

Comparte este artículo

Subscríbete a nuestro Newsletter

Mantente al día en el mundo de las aplicaciones móviles con nuestro blog especializado.

Artículos semanales

Todas las semanas artículos nuevos sobre el mundo de las aplicaciones móviles.

No spam

No te enviaremos spam, solo contenido de calidad. Puedes darte de baja cuando quieras.

Contenido de calidad

Nada de contenido generado de manera automática usando ChatGPT.

Recomendaciones

Tips indispensables sobre mejores prácticas y metodologías.

© 2024 AsyncLearn