Realm para Swift: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Realm y para qué sirve?

\n\n

Realm es una base de datos móvil, creada como alternativa a Core Data y SQLite. A diferencia de las bases de datos relacionales tradicionales, Realm funciona como un almacenamiento orientado a objetos: trabajas con objetos nativos de Swift, no con consultas SQL o NSManagedObject. Realm almacena datos en su propio formato, lo que proporciona una velocidad de funcionamiento cercana a la de la memoria RAM.

\n\n

Principales ventajas de Realm:

\n
    \n
  • Velocidad: Realm funciona de 10 a 100 veces más rápido que SQLite en dispositivos móviles.
  • \n
  • Simplicidad: Trabajas con objetos Swift normales, heredándolos de Realm.Object.
  • \n
  • Actualización automática: Los resultados de las consultas (Results) se actualizan automáticamente cuando los datos cambian.
  • \n
  • Objetos en vivo: Los objetos de Realm se sincronizan automáticamente con la base de datos.
  • \n
  • Multiplataforma: Realm funciona en iOS, macOS, tvOS y watchOS.
  • \n
\n\n

Realm es ideal para aplicaciones que requieren acceso rápido a datos en el dispositivo: listas de tareas, mensajería, almacenamiento en caché de datos de red, aplicaciones de notas y muchas otras.

\n\n

Instalación de Realm en Swift

\n\n

Realm para Swift se instala a través de Swift Package Manager (SPM), CocoaPods o Carthage. Veamos las dos formas más populares.

\n\n

Instalación a través de Swift Package Manager (recomendado)

\n
    \n
  1. En Xcode abre tu proyecto: File → Add Packages...
  2. \n
  3. Pega la URL: https://github.com/realm/realm-swift.git
  4. \n
  5. Selecciona la versión (se recomienda la última estable) y haz clic en Add Package.
  6. \n
  7. En la ventana que aparece, selecciona el paquete Realm y RealmSwift para tu compilación objetivo.
  8. \n
\n\n

Instalación a través de CocoaPods

\n

Añade al Podfile:

\n
target 'YourApp' do\n  use_frameworks!\n  pod 'RealmSwift'\nend
\n

Luego ejecuta en la terminal:

\n
pod install
\n\n

Importación en el código

\n
import RealmSwift
\n\n

Inicio rápido: primer modelo y escritura de datos

\n\n

Creemos un modelo de tarea simple y guardémoslo en la base de datos.

\n\n
import RealmSwift\n\n// 1. Definimos el modelo\nclass Task: Object {\n    @Persisted var id: String = UUID().uuidString\n    @Persisted var title: String = ""\n    @Persisted var isCompleted: Bool = false\n    @Persisted var createdAt: Date = Date()\n    \n    // Clave primaria (opcional, pero recomendada)\n    override static func primaryKey() -> String? {\n        return "id"\n    }\n}\n\n// 2. Guardamos el objeto\nlet task = Task()\ntask.title = "Comprar víveres"\ntask.isCompleted = false\n\nlet realm = try! Realm()\ntry! realm.write {\n    realm.add(task)\n}\n\n// 3. Leemos todas las tareas\nlet tasks = realm.objects(Task.self)\nfor task in tasks {\n    print("\\(task.title) - \\(task.isCompleted ? "Completada" : "No completada")")\n}
\n\n

Métodos y funciones principales de Realm

\n\n

A continuación se presentan los métodos clave para trabajar con Realm. Cada método va acompañado de una descripción, parámetros y un ejemplo funcional.

\n\n

1. Realm() — Inicialización de la base de datos

\n

Qué hace: Crea o abre una base de datos Realm existente. Por defecto, el archivo de la base de datos se encuentra en el directorio Documents de la aplicación.

\n

Parámetros: configuration: Realm.Configuration? — configuración opcional (URL del archivo, esquema, versión de migración).

\n
// Inicialización estándar\nlet realm = try! Realm()\n\n// Inicialización con URL personalizada\nlet config = Realm.Configuration(fileURL: FileManager.default\n    .urls(for: .documentDirectory, in: .userDomainMask)\n    .first?.appendingPathComponent("myrealm.realm"))\nlet customRealm = try! Realm(configuration: config)
\n\n

2. realm.wr

Recommendations