ORM para Swift (iOS/macOS): comparação e exemplos
No desenvolvimento de aplicativos para iOS e macOS, os desenvolvedores frequentemente precisam armazenar dados no dispositivo. Para simplificar o trabalho com bancos de dados, são utilizados ORM (Object-Relational Mapping) — bibliotecas que permitem trabalhar com dados como objetos Swift comuns, ocultando a complexidade das consultas SQL. Neste artigo, veremos quatro soluções populares: Core Data, Realm, GRDB e SQLite.swift, compararemos seus recursos e forneceremos exemplos práticos.
1. Core Data
Core Data é um framework da Apple, integrado ao iOS e macOS. Não é um ORM puro, mas sim um framework para gerenciamento de grafos de objetos, que pode usar SQLite, XML ou armazenamento binário.
Vantagens:
- Integração profunda com o ecossistema Apple (SwiftUI, iCloud, Undo Manager).
- Editor visual de modelo de dados (Xcode Data Modeler).
- Suporte a versionamento e migrações.
Desvantagens:
- Alta curva de aprendizado (muito código boilerplate).
- Problemas de desempenho ao trabalhar com grandes conjuntos de dados.
- Forte dependência das plataformas Apple.
Exemplo de código (Swift):
import CoreData
// Criação do contextolet container = NSPersistentContainer(name: "Model")container.loadPersistentStores { _, error in if let error = error { print(error) }}
// Salvando um 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 é um ORM multiplataforma, desenvolvido especificamente para aplicativos móveis. Ele é mais rápido que o Core Data em operações de leitura e gravação.
Vantagens:
- Alto desempenho (até 10x mais rápido que Core Data).
- API simples sem necessidade de escrever SQL.
- Atualização automática de objetos (live objects).
- Suporte a extensões reativas (RxRealm, Combine).
Desvantagens:
- Formato de arquivo de banco de dados fechado.
- Tamanho limitado do banco (até 2 GB no iOS).
- Menos flexibilidade para consultas complexas.
Exemplo de código (Swift):
import RealmSwift
// Definição do modeloclass User: Object { @Persisted var name: String = "" @Persisted var age: Int = 0}
// Salvandolet 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 é uma biblioteca moderna para trabalhar com SQLite em Swift. Ela combina os recursos de acesso de baixo nível ao SQL com a conveniência de um ORM.
Vantagens:
- Desempenho máximo (SQLite nativo).
- Suporte a Combine e Swift Concurrency (async/await).
- Controle total sobre consultas SQL.
- Suporte a migrações e versionamento.
Desvantagens:
- Requer conhecimento de SQL.
- Menos "mágica" — mais código manual.
Exemplo de código (Swift):
import GRDB
// Definição do modelostruct User: Codable, FetchableRecord, PersistableRecord { var id: Int64? var name: String var age: Int}
// Conexão ao bancolet dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")
// Salvandotry dbQueue.write { db in let user = User(nam Também na biblioteca
Análise de HTML em C++: Visão geral das bibliotecas Gumbo, MyHTML e htmlcxx
Registro em Go (Golang): melhores bibliotecas e soluções para produção
typia para TypeScript: guia completo com exemplos