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

Recommendations