É frecuente que unha aplicación necesite almacenar datos que persistirán durante os reinicios da aplicación.
- Isto é particularmente útil para almacenar a configuración de preferencias do usuario
- Tamén ao restaurar unha escena ao estado exacto no que estaba a última vez que o usuario accedeu a ela.
Para iso, SwiftUl proporciona dúas envolturas de propiedades (property wrappers):
@AppStorage
@SceneStorage
@SceneStorage
#
@SceneStorage
utilízase para almacenar e recuperar datos dunha escena específica.
- Utilízase para preservar o estado dunha vista entre diferentes sesións de usuario, mesmo despois de pechar a aplicación.
- É especialmente útil cando se desexa gardar o estado dunha vista nun escenario de multitarea.
Por exemplo, se tes unha aplicación que permite ao usuario tomar notas, podes usar @SceneStorage
para gardar as notas do usuario mentres a aplicación está en segundo plano ou se pecha, e logo recuperalas cando a aplicación volva abrirse.
Considera, por exemplo, unha aplicación na que se introduce información mediante un formulario.
- Mentras introducimos os datos nos chaman ao móbil e deixamos a aplicación en segundo plano.
- Despóis da chamada, olvidamos volver a nosa aplicación a introducir os datos e gardalos.
- Se a aplicación se pecha aplicación a información parcial introducida no formulario perderíase.
Para solucionar o problema anterior, empregamos @SceneStorage
Como funciona @SceneStorage
? #
Declaramos unha propiedade mediante @SceneStorage
xunto cun valor String
e que se utiliza para almacenar o valor asociado:
struct ContentView: View {
@SceneStorage("nomeUsuario") var nomeUsuario = ""
var body: some View {
TextEditor(text: $nomeUsuario)
}
}
Cando se implementa nunha aplicación, isto garantirá que calquera texto introducido no campo de texto se conserve dentro da escena aínda que se reinicie a aplicación.
@AppStorage
#
@SceneStorage
permite que cada escena individual dentro dunha aplicación teña a súa propia copia dos datos almacenados. Noutras palabras, os datos almacenados por unha escena non son accesibles para ningunha outra escena na aplicación@AppStorage
utilízase para almacenar datos que están dispoñibles universalmente en toda a aplicación.
Do mesmo xeito que con @SceneStorage
, @AppStorage
require un valor de cadea para servir como clave e pode declararse da seguinte maneira:
struct ContentView: View {
@AppStorage("nomeUsuario") var nomeUsuario = ""
var body: some View {
TextEditor(text: $nomeUsuario)
}
}
UserDefaults #
@AppStorage
baséase en UserDefaults
, unha forma para que as aplicacións accedan e almacenen as preferencias predeterminadas do usuario (como as preferencias de idioma ou as opcións de cor).
UserDefaults
tamén se pode utilizar para almacenar pequenas cantidades de datos necesarios para a aplicación en forma de pares crave-valor.
De forma predeterminada, os datos almacenaranse no almacenamento estándar de UserDefaults
.