Programación en Swift y SwiftUI para iOS Developers

Que es @State en SwiftUI

La gestión del estado es un aspecto crucial del desarrollo de aplicaciones que cada desarrollador debe abordar. Vamos a considerar que estamos desarrollando una app que es un reproductor de música.

Por ejemplo en una app de música, cuando el usuario hace tap en el botón Play, tendría que transicionar hacia el botón Stop. En esta implementación necesitamos un mecanismo para rastrear el estado de la aplicación, permitiéndote determinar cuando alterar la apariencia del botón.

SwiftUI proporciona muchas características para manejar la gestión del estado. Una de esas características es el property wrapper @State. Cuando anotas una propiedad con @State, SwiftUI automáticamente lo almacena dentro de su aplicación. Además, las vistas que utilizan esta propiedad son automaticamente notificadas de cualquier cambio en su valor. Como resultado, cuando el estado cambia, SwiftUI vuelve a calcular las vistas afectadas y actualiza la apariencia de la aplicación consecuentemente.

En SwiftUI las vistas son structs y usamos el property wrapper @State para modificar sus valores. Usamos este property wrapper para que se encargue de guardar el estado fuera de la struct (vista) y podamos dibujar la vista sin perder el estado que teníamos.

Cuando añadimos @State estamos haciendo que si por alguna razón cambia su valor, la vista queda regenerada por completo, es decir se vuelve a dibujar todo lo que hay dentro de la variable body.

@State es un property wrapper, usado para manejar y sincronizar el estado de la vista a través de diferentes componentes y debe ser usada con tipos de estructuras simples como String, Int y arrays y generalmente no debe ser compartidas con otras vistas. Si quieres  compartir valores a través de vistas probablemente uses @ObservedObject o @EnvironmentObject, ambos garantizan que todas las vistas seran actualizadas cuando los datos cambien.

La recomendación, para las propiedades @State, es declararlas como privadas para reforzar que son locales, de la siguiente manera:

@State private var playButton: Bool = false

Unicamente accede a una propiedad @State desde dentro de la vista body o desde funciones llamadas desde body. 

Leave a Reply

Your email address will not be published. Required fields are marked *

Previous Article

Como crear un boton con gradiente y sombra en SwiftUI

Next Article

Que es @Binding en SwiftUI

Related Posts