ORM para Swift (iOS/macOS): comparación y ejemplos de uso

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

ORM para Swift (iOS/macOS): comparación y ejemplos



Al desarrollar aplicaciones para iOS y macOS, trabajar con datos locales es una de las tareas clave. El Mapeo Objeto-Relacional (ORM) permite a los desarrolladores trabajar con bases de datos utilizando un enfoque orientado a objetos, en lugar de escribir consultas SQL en bruto. En este artículo, analizaremos cuatro soluciones ORM principales para Swift: Core Data, Realm, GRDB y SwiftData. Conocerás sus fortalezas y debilidades, y también verás ejemplos de código para cada tecnología.



1. Core Data



Core Data es un framework de Apple, integrado en iOS, macOS, tvOS y watchOS. No es un ORM puro (más bien un framework de persistencia), pero realiza todas las funciones de un ORM: gestión del modelo de objetos, persistencia, deshacer cambios y vinculación con la UI a través de NSFetchedResultsController.



Ventajas:

  • Integración profunda con el ecosistema de Apple (iCloud, SwiftUI, Combine)
  • Soporte integrado para versionado y migración de datos
  • Predicados y ordenamientos potentes


Desventajas:

  • Configuración compleja y mucho código repetitivo (boilerplate)
  • Problemas con la concurrencia (requiere un contexto estricto)
  • Bajo rendimiento con grandes volúmenes de datos


Ejemplo de uso:

import CoreData

// 1. Creamos el modelo (en el Editor de Modelo de Datos de Xcode)// 2. Inicializamos el contenedorlet container = NSPersistentContainer(name: "MyModel")container.loadPersistentStores { _, error in if let error = error { fatalError("Error al cargar: \\(error)") }}

// 3. Guardar un objetolet context = container.viewContextlet user = User(context: context)user.name = "Iván"user.age = 30try? context.save()

// 4. Consultalet request: NSFetchRequest<User> = User.fetchRequest()request.predicate = NSPredicate(format: "age > %@", 18)let adults = try? context.fetch(request)


2. Realm



Realm es un ORM de terceros popular, creado para plataformas móviles. Funciona más rápido que Core Data en la mayoría de los escenarios y es más fácil de usar. Realm utiliza su propio motor de almacenamiento, no SQLite.



Ventajas:

  • Alta velocidad de lectura/escritura
  • API simple (sin NSManagedObject)
  • Soporte integrado para actualizaciones reactivas (a través de Realm Notifications)


Desventajas:

  • Código cerrado (no es completamente open-source)
  • Problemas con la migración al cambiar el modelo
  • Soporte limitado para consultas complejas (JOIN, subconsultas)


Ejemplo de uso:

import RealmSwift

// 1. Definimos el modeloclass User: Object { @Persisted var name: String = "" @Persisted var age: Int = 0}

// 2. Creamos y guardamoslet realm = try! Realm()let user = User()user.name = "María"user.age = 25try! realm.write { realm.add(user)}

// 3. Consultalet adults = realm.objects(User.self).filter("age > 18")


3. GRDB



GRDB es un ORM ligero para Swift, construido sobre SQLite. Proporciona control total sobre las consultas SQL, pero al mismo tiempo ofrece una interfaz orientada a objetos conveniente. GRDB es especialmente popular entre los desarrolladores que desean combinar el poder de SQL con la comodidad de Swift.



Ventajas:

  • Acceso completo a SQL (se pueden escribir consultas complejas)
  • Alto rendimiento (cercano a SQLite puro)
  • Soporte para Swift Concurrency (async/await)


Desventajas:

  • Requiere conocimiento de SQL
  • Menos documentación que Core Data
  • Sin soporte integrado para iCloud


Ejemplo de uso:

import GRDB

// 1. Definimos el modelo (Codable + FetchableRecord)struct User: Codable, FetchableRecord, PersistableRecord { var id: Int64? var name: String\

Recommendations