AppStorage es un "property-wrapper" que permite leer y escribir una llave en el UserDefaults.standard y recarga la vista cuando detecta un cambio.
Recordar que UserDefaults está pensado para guardar configuración liviana de la aplicación.
En el siguiente ejemplo se usa @AppStorage para manejar la llave "counter" del UserDefaults.standard. Cada vez que se produce un cambio con el Stepper de arriba, el Text se actualiza con el nuevo valor de counter. No solo eso: cada vez que se produce un cambio directamente en el UserDefaults.standard sobre la llave observada con AppStorage, como es el caso del segundo Stepper, el "property-wrapper" @AppStorage igual recarga el cuerpo de la vista ContentView.
La importancia de usar UserDefaults (@AppStorage en este caso), es que la información persiste entre arranques de la aplicación.
struct ContentView: View {
@AppStorage("counter") private var counterValue: Int = 0
var body: some View {
VStack {
Text("Contador: \(counterValue)")
Stepper("Modificar contador con @AppStorage", value: $counterValue)
Stepper("Modificar contador con UserDefaults", value: .init(get: {
return UserDefaults.standard.value(forKey: "counter") as? Int ?? 0
}, set: { newValue in
UserDefaults.standard.set(newValue, forKey: "counter")
}))
}
}
}

Top comments (0)