Aprender a persistir información del usuario de forma local es una habilidad fundamental cuando construyes aplicaciones en SwiftUI. En esta lección se construye paso a paso una clase llamada SaveData que permite guardar, recuperar y validar datos utilizando UserDefaults, todo dentro del patrón de arquitectura MVVM (Model-View-ViewModel).
¿Cómo se estructura la clase SaveData dentro del patrón MVVM?
La clase SaveData se ubica dentro de la carpeta de ViewModels porque contiene lógica de aplicación, no diseño visual. Esta separación es clave en el protocolo MVVM: las vistas (Views) se encargan de la interfaz y los ViewModels manejan la lógica y el estado.
Antes de crear el archivo, se muestra una posible solución para la pantalla ProfileView y EditProfileView [1:00]. Los ajustes incluyen:
- Un Spacer debajo del módulo de ajustes para elevar la vista y acercarla al diseño original.
- Un texto temporal dentro del VStack junto a la imagen de perfil, preparado para mostrar el nombre real del usuario cuando se recupere.
- Padding adicional en los Dividers de EditProfileView y color blanco en los campos de contraseña y nombre.
Después, en la función actualizarDatos, se crean dos constantes importantes [2:15]:
objetoActualizadorDatos: instancia de la clase SaveData.
resultado: almacena el valor booleano que devuelve la función de guardar datos, indicando si la operación fue exitosa.
¿Cómo guardar datos del usuario con UserDefaults?
El archivo SaveData.swift se crea como un nuevo archivo Swift [3:10]. La clase define tres variables de tipo String sin valor inicial: correo, contraseña y nombre.
¿Qué hace la función guardarDatos?
La primera función, guardarDatos, recibe tres parámetros de tipo String (correo, contraseña, nombre) y devuelve un booleano [3:45]. Dentro de su cuerpo se utiliza la clase UserDefaults, un espacio especial de memoria reservado para almacenar datos pequeños como textos, números, booleanos o valores con decimales. No es recomendable para imágenes o videos por su peso.
La forma de guardar es:
swift
UserDefaults.standard.set([correo, contraseña, nombre], forKey: "datosUsuario")
return true
Se almacena un arreglo de Strings con una llave llamada "datosUsuario" [5:30]. Este esquema de llave-valor funciona de manera similar a los objetos JSON: accedes al valor por medio de su llave.
¿Cómo recuperar los datos almacenados?
La segunda función, recuperarDatos, no recibe parámetros y devuelve un arreglo de Strings [6:40]. Utiliza UserDefaults.standard.stringArray(forKey: "datosUsuario") para obtener la información guardada. Como el resultado podría ser nil si la llave no existe, se realiza un unwrap del opcional para manejar la seguridad de tipos.
swift
let datosUsuario: [String] = UserDefaults.standard.stringArray(forKey: "datosUsuario")!
return datosUsuario
¿Cómo validar credenciales de usuario con UserDefaults?
La tercera función, validar, recibe un correo y una contraseña de tipo String y devuelve un booleano [8:20]. Su propósito es verificar si las credenciales que escribe el usuario coinciden con las almacenadas.
Primero se comprueba si existe un objeto guardado con la llave "datosUsuario". Si no existe nada, se imprime un mensaje y se retorna false. Si sí existe, se recuperan los valores en las posiciones del arreglo:
- Posición 0: correo.
- Posición 1: contraseña.
- Posición 2: nombre.
La validación utiliza un if con doble condición usando el operador && [11:15]:
swift
if correo == correoGuardado && contraseña == contraseñaGuardada {
return true
} else {
return false
}
Si ambas coinciden, el usuario puede ingresar. Si cualquiera de las dos falla, se retorna false.
Al compilar y probar la aplicación [12:30], se escribe un correo como juan@gmail.com, una contraseña 12345 y el nombre Juan. Al pulsar Actualizar datos, la consola confirma que los datos se guardaron con éxito, mostrando cada valor recibido por la función.
Esta clase queda lista para implementarse también en las pantallas de inicio de sesión y registro, donde puedes combinar guardarDatos para el registro, validar para el login y mostrar alertas cuando las credenciales no coincidan. ¿Ya lograste implementar la validación en tu pantalla de inicio de sesión? Comparte tu solución y compárala con otras alternativas.