Persistencia de Datos en iOS con UserDefaults

Clase 12 de 52Curso de Desarrollo de Apps para iOS

Contenido del curso

Tu primera app en iOS

Proyecto: PlatziTweets

Resumen

Guardar información localmente en una aplicación móvil transforma por completo la experiencia del usuario. Desde recordar un correo electrónico hasta mantener preferencias activas, la persistencia local es una habilidad fundamental para cualquier desarrollador iOS que quiera crear aplicaciones profesionales y cómodas de usar.

¿Qué es la persistencia y por qué importa en tus aplicaciones?

La persistencia consiste en almacenar datos de forma local dentro de la aplicación para que el usuario pueda recuperarlos después [0:10]. No importa si trabajas en Android, iOS o web: esta funcionalidad mejora la experiencia porque evita que el usuario repita acciones innecesarias, como escribir su correo electrónico cada vez que inicia sesión.

Un ejemplo clásico es mantener el correo guardado en el campo de texto del login. Para lograr esto en iOS, Apple provee una clase llamada UserDefaults [0:50], que permite leer y escribir valores simples en el almacenamiento local del dispositivo.

¿Cómo configurar la interfaz para activar la persistencia?

Antes de escribir código, es necesario preparar la interfaz. En el proyecto de práctica se añaden dos elementos clave dentro de un stack view [1:20]:

  • Un UISwitch que permite al usuario decidir si quiere que su correo se recuerde.
  • Un UILabel con el texto "Recordar correo" para explicar la función del switch.

El switch se conecta al código mediante un IBOutlet llamado emailSwitch [2:05]. Por defecto, se deja en estado off para respetar la decisión del usuario.

¿Cómo acceder a UserDefaults desde el código?

Para trabajar con UserDefaults se crea una constante que referencia la instancia estándar [2:30]:

swift let storage = UserDefaults.standard

También se define una llave (key) con la cual se identificará el valor guardado:

swift let emailKey = "email_key"

Una buena práctica es mantener un formato consistente en todas las llaves. Si una se llama email_key, las demás deben seguir la misma estructura [2:55].

¿Cómo buscar un valor guardado al iniciar la aplicación?

Dentro del método viewDidLoad, se verifica si ya existe un correo almacenado usando string(forKey:) [3:15]:

swift if let storedEmail = storage.string(forKey: emailKey) { emailTextField.text = storedEmail emailSwitch.isOn = true } else { emailSwitch.isOn = false }

Si el correo existe, se asigna al campo de texto y se activa el switch automáticamente. Si no existe, el switch permanece desactivado. Esta lógica es puramente una mejora de experiencia de usuario.

¿Cómo guardar y borrar valores en UserDefaults?

El correo solo debe guardarse cuando ocurren dos condiciones: el switch está activado y el login es exitoso [4:30]. Dentro del bloque de autenticación correcta se utiliza el método setValue(_:forKey:):

swift if emailSwitch.isOn { storage.setValue(emailTextField.text, forKey: emailKey) } else { storage.removeObject(forKey: emailKey) }

  • Guardar: setValue almacena el correo asociado a la llave definida [5:00].
  • Borrar: removeObject(forKey:) elimina el valor almacenado cuando el usuario desactiva el switch y hace login [6:25].

Al cerrar y reabrir la aplicación, el campo de correo aparece prellenado si el usuario eligió recordarlo, o vacío si decidió lo contrario [6:50].

¿Es seguro guardar contraseñas en UserDefaults?

La respuesta es no. Nunca se deben almacenar contraseñas, tokens de autenticación ni información sensible en UserDefaults [7:30]. En dispositivos con jailbreak o vulnerabilidades, estos datos pueden quedar expuestos.

Para almacenar información sensible de forma segura, Apple ofrece los Keychain Services [7:45], que son espacios protegidos y cifrados diseñados específicamente para contraseñas y credenciales.

Tres operaciones esenciales quedaron cubiertas: obtener valores con una llave, guardarlos con setValue y borrarlos con removeObject. Practica almacenando distintos tipos de datos como números, booleanos o cadenas de texto hasta que te sientas cómodo con el flujo completo. ¿Qué otro dato guardarías con UserDefaults en tu próxima aplicación?