Cómo usar UserDefaults en iOS

Resumen

Guardar datos locales en una app de iOS empieza por dominar UserDefaults en Swift, la herramienta ideal para persistir valores simples como un nickname, una fecha o un booleano sin recurrir a una base de datos. Si estás aprendiendo desarrollo iOS y quieres entender cuándo y cómo aplicarlo, este recorrido te muestra el flujo completo con un ejemplo real.

Qué es UserDefaults y para qué sirve en iOS

UserDefaults es el sistema de Apple para guardar pequeñas piezas de información de forma local y persistente entre sesiones de la app. Piensa en él como una libreta de notas rápidas: útil para apuntes cortos, no para archivar libros enteros.

¿Qué tipo de datos puedo guardar en UserDefaults? Solo datos sencillos: strings, booleans, números y fechas. Para estructuras grandes necesitas una base de datos como Swift Data o Realm.

Cómo se estructura el proyecto base del ejemplo

La app de demostración tiene una vista única donde puedes escribir un apodo, guardarlo y eliminarlo. La arquitectura separa responsabilidades de forma limpia [00:42].

  • MainView: la vista que renderiza el input y los botones.
  • MainViewModel: contiene las funciones declaradas con sus todos pendientes por resolver.
  • Repositorio base: disponible en el sistema de recursos para que clones y practiques.

Antes de tocar lógica, lo primero es crear la instancia que nos dará acceso a todo lo guardado localmente.

Cómo creo la instancia de UserDefaults

Dentro del ViewModel declaras una constante que vivirá durante todo el ciclo de la clase [01:18]:

swift let defaults = UserDefaults.standard

Con eso ya tienes el puente para leer y escribir valores en cualquier función del ViewModel.

Cómo guardar un nickname con UserDefaults

La función para guardar usa el método set, que recibe el valor y la llave bajo la cual lo almacenas [01:35]. El valor sale del input que el usuario escribe, ligado a la variable nickname.

En vez de pasar el string "nickname" directamente cada vez, conviene declarar una constante con la llave. Esto evita typos cuando reutilizas la misma llave en varias funciones [02:05]:

swift let nicknameKey = "nickname"

func saveNickname() { defaults.set(nickname, forKey: nicknameKey) }

Usar una constante para la llave es una buena práctica que tu yo del futuro va a agradecer cuando la app crezca.

¿Por qué usar una constante para la llave en UserDefaults? Porque evitas errores de tipeo y centralizas el cambio en un solo lugar si decides renombrarla más adelante.

Cómo elimino y leo valores guardados

Eliminar un valor es tan directo como llamar a removeObject con la misma llave. Leerlo requiere validar primero si existe.

Cómo elimino un objeto en UserDefaults

La función de borrado localiza el valor por su llave y lo retira del almacenamiento local [02:35]:

swift func deleteNickname() { defaults.removeObject(forKey: nicknameKey) getNickname() }

Fíjate en que después de eliminar volvemos a llamar a getNickname. Esto refresca el estado de la vista para reflejar el cambio de inmediato.

Cómo obtengo el nickname guardado

La lectura usa defaults.string(forKey:) envuelto en un if let para manejar el caso en que no haya nada guardado [03:05]:

swift func getNickname() { if let storedNickname = defaults.string(forKey: nicknameKey) { canDelete = true nickname = storedNickname } else { canDelete = false nickname = "" } }

Cuando hay un valor, habilitas el botón de eliminar y rellenas el input. Cuando no, dejas la vista vacía y el botón deshabilitado, que es el estado típico de la primera vez que abres la app.

Cómo se comporta la app al probarla en el simulador

Al correr el proyecto en Xcode, el flujo confirma que la persistencia funciona [04:15]:

  • Escribes un apodo y al guardar se habilita el botón de eliminar.
  • Cierras la app, la vuelves a abrir y el apodo sigue ahí.
  • Editas el valor, guardas, reinicias y aparece la versión actualizada.

Ese pequeño ciclo demuestra el corazón de UserDefaults: los datos sobreviven al cierre de la aplicación sin que tengas que escribir lógica adicional de archivos o redes.

¿UserDefaults sirve para guardar listas de productos o usuarios? No. Está pensado para datos simples y livianos. Para colecciones o relaciones complejas usa Swift Data o Realm.

En la siguiente clase vas a ver la arquitectura del proyecto base y cómo implementarla con bases de datos reales. ¿Ya tienes claro qué dato sencillo de tu app guardarías con UserDefaults? Cuéntalo en los comentarios.