ORM para Swift (iOS/macOS): comparación y ejemplos
Al desarrollar aplicaciones para iOS y macOS, los desarrolladores a menudo se enfrentan a la necesidad de almacenar datos en el dispositivo. Para simplificar el trabajo con bases de datos, se utilizan ORM (Object-Relational Mapping) — bibliotecas que permiten trabajar con datos como objetos Swift comunes, ocultando la complejidad de las consultas SQL. En este artículo, analizaremos cuatro soluciones populares: Core Data, Realm, GRDB y SQLite.swift, compararemos sus capacidades y proporcionaremos ejemplos prácticos.
1. Core Data
Core Data es un framework de Apple, integrado en iOS y macOS. No es un ORM puro, sino un framework para la gestión de grafos de objetos que puede utilizar SQLite, XML o almacenamiento binario.
Ventajas:
- Integración profunda con el ecosistema de Apple (SwiftUI, iCloud, Undo Manager).
- Editor visual de modelos de datos (Xcode Data Modeler).
- Soporte para versionado y migraciones.
Desventajas:
- Alta curva de aprendizaje (mucho código boilerplate).
- Problemas de rendimiento al trabajar con grandes conjuntos de datos.
- Fuerte dependencia de las plataformas Apple.
Ejemplo de código (Swift):
import CoreData
// Creación del contextolet container = NSPersistentContainer(name: "Model")container.loadPersistentStores { _, error in if let error = error { print(error) }}
// Guardar objetolet context = container.viewContextlet user = User(context: context)user.name = "Иван"user.age = 30
try? context.save()
// Consultalet request: NSFetchRequest<User> = User.fetchRequest()request.predicate = NSPredicate(format: "age > 18")let users = try? context.fetch(request)2. Realm
Realm es un ORM multiplataforma, diseñado específicamente para aplicaciones móviles. Es más rápido que Core Data en operaciones de lectura y escritura.
Ventajas:
- Alto rendimiento (hasta 10x más rápido que Core Data).
- API simple sin necesidad de escribir SQL.
- Actualización automática de objetos (live objects).
- Soporte para extensiones reactivas (RxRealm, Combine).
Desventajas:
- Formato de archivo de base de datos cerrado.
- Tamaño de base de datos limitado (hasta 2 GB en iOS).
- Menos flexibilidad para consultas complejas.
Ejemplo de código (Swift):
import RealmSwift
// Definición del modeloclass User: Object { @Persisted var name: String = "" @Persisted var age: Int = 0}
// Guardarlet realm = try! Realm()let user = User()user.name = "Мария"user.age = 25
try! realm.write { realm.add(user)}
// Consultalet users = realm.objects(User.self).filter("age > 18")for user in users { print("\\(user.name): \\(user.age)")}3. GRDB
GRDB es una biblioteca moderna para trabajar con SQLite en Swift. Combina las capacidades de acceso de bajo nivel a SQL con la comodidad de un ORM.
Ventajas:
- Máximo rendimiento (SQLite nativo).
- Soporte para Combine y Swift Concurrency (async/await).
- Control total sobre las consultas SQL.
- Soporte para migraciones y versionado.
Desventajas:
- Requiere conocimiento de SQL.
- Menos "magia" — más código manual.
Ejemplo de código (Swift):
import GRDB
// Definición del modelostruct User: Codable, FetchableRecord, PersistableRecord { var id: Int64? var name: String var age: Int}
// Conexión a la base de datoslet dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")
// Guardartry dbQueue.write { db in let user = User(nam También en la biblioteca
Planificador de tareas en TypeScript: guía detallada de la biblioteca node-schedule
Guía completa de Ehcache para Java: ejemplos y uso
Inyección de Dependencias (Dependency Injection) en C++: contenedores y práctica
Trabajo con imágenes en PHP: resize, crop y optimización con GD e Imagick