Modificador task
Libranner Santos
05 mayo, 20232min de lectura
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 = falsevar 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
.