ORM para Swift (iOS/macOS): comparação e exemplos de uso

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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\

Recommendations