ORM para Swift (iOS/macOS): comparação e exemplos
No desenvolvimento de aplicativos para iOS e macOS, trabalhar com dados locais é uma das tarefas principais. O Object-Relational Mapping (ORM) permite que desenvolvedores trabalhem com bancos de dados usando uma abordagem orientada a objetos, em vez de escrever consultas SQL brutas. Neste artigo, veremos quatro principais soluções ORM para Swift: Core Data, Realm, GRDB e SwiftData. Você conhecerá seus pontos fortes e fracos, além de ver exemplos de código para cada tecnologia.
1. Core Data
Core Data é um framework da Apple, integrado ao iOS, macOS, tvOS e watchOS. Não é uma ORM pura (mais um persistence framework), mas executa todas as funções de uma ORM: gerenciamento de modelo de objetos, persistência, reversão de alterações e vinculação com a interface do usuário através do NSFetchedResultsController.
Vantagens:
- Integração profunda com o ecossistema Apple (iCloud, SwiftUI, Combine)
- Suporte nativo a versionamento e migração de dados
- Predicados e ordenações poderosos
Desvantagens:
- Configuração complexa e muito código boilerplate
- Problemas com multithreading (exige contexto rigoroso)
- Baixo desempenho com grandes volumes de dados
Exemplo de uso:
import CoreData
// 1. Criamos o modelo (no Xcode Data Model Editor)// 2. Inicializamos o containerlet container = NSPersistentContainer(name: "MyModel")container.loadPersistentStores { _, error in if let error = error { fatalError("Falha ao carregar: \\(error)") }}
// 3. Salvando o objetolet context = container.viewContextlet user = User(context: context)user.name = "Ivan"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 é uma ORM de terceiros popular, criada para plataformas móveis. Funciona mais rápido que o Core Data na maioria dos cenários e é mais simples de usar. O Realm usa seu próprio mecanismo de armazenamento, em vez do SQLite.
Vantagens:
- Alta velocidade de leitura/escrita
- API simples (sem NSManagedObject)
- Suporte nativo a atualizações reativas (via Realm Notifications)
Desvantagens:
- Código fechado (não é totalmente open-source)
- Problemas com migração ao alterar o modelo
- Suporte limitado a consultas complexas (JOIN, subconsultas)
Exemplo de uso:
import RealmSwift
// 1. Definimos o modeloclass User: Object { @Persisted var name: String = "" @Persisted var age: Int = 0}
// 2. Criamos e salvamoslet realm = try! Realm()let user = User()user.name = "Maria"user.age = 25try! realm.write { realm.add(user)}
// 3. Consultalet adults = realm.objects(User.self).filter("age > 18")3. GRDB
GRDB é uma ORM leve para Swift, construída sobre o SQLite. Ela dá controle total sobre consultas SQL, mas ao mesmo tempo fornece uma interface orientada a objetos conveniente. GRDB é especialmente popular entre desenvolvedores que desejam combinar o poder do SQL com a conveniência do Swift.
Vantagens:
- Acesso completo ao SQL (possibilidade de escrever consultas complexas)
- Alto desempenho (próximo ao SQLite puro)
- Suporte a Swift Concurrency (async/await)
Desvantagens:
- Requer conhecimento de SQL
- Menos documentação que o Core Data
- Sem suporte nativo ao iCloud
Exemplo de uso:
import GRDB
// 1. Definimos o modelo (Codable + FetchableRecord)struct User: Codable, FetchableRecord, PersistableRecord { var id: Int64? var name: String\ Também na biblioteca
MongoDB.Driver para C# (.NET): guia completo com exemplos
mockall para Rust: guia completo com exemplos práticos
Configuração de aplicações C# (.NET): bibliotecas e abordagens
ORM para Rust: comparação entre Diesel, SeaORM, SQLx e exemplos de código