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, 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

Recommendations