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

Ao desenvolver aplicativos para iOS e macOS, surge frequentemente a necessidade de trabalhar com bancos de dados locais. ORM (Object-Relational Mapping) permite trabalhar com dados através de objetos da linguagem de programação, abstraindo-se das consultas SQL. No ecossistema Swift, existem várias soluções populares. Neste artigo, compararemos Core Data, Realm, GRDB e SwiftData, apresentaremos exemplos de código e ajudaremos a escolher a ferramenta adequada para o seu projeto.



1. Core Data

Core Data é um framework embutido da Apple que oferece não apenas ORM, mas também uma pilha completa de gerenciamento de objetos (grafo de objetos, lazy loading, undo/redo). Funciona com SQLite, XML ou armazenamento binário. A ideia principal é trabalhar através do NSManagedObjectContext.



Exemplo de código (Core Data)

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()let users = try? context.fetch(request)


Vantagens: integração total com Xcode, gerenciamento automático de migrações, suporte a iCloud.

Desvantagens: curva de aprendizado complexa, necessidade de criar o modelo de dados no editor, muito código boilerplate.



2. Realm

Realm é uma ORM multiplataforma que funciona em seu próprio motor (não SQLite). É mais rápida que Core Data na maioria das operações e possui uma API mais simples. Suporta Swift, Objective-C, Kotlin, Java.



Exemplo de código (Realm)

import RealmSwift

// Definição do modeloclass User: Object { @Persisted var name: String = "" @Persisted var age: Int = 0}

// Salvandolet realm = try! Realm()let user = User(value: ["name": "Мария", "age": 25])try! realm.write { realm.add(user)}

// Consultalet users = realm.objects(User.self).filter("age > 18")


Vantagens: alta performance, API conveniente, suporte embutido a Live Objects (atualização automática da UI).

Desvantagens: licença proprietária (desde 2020 é aberta, mas com limitações), tamanho grande do binário, dificuldades com migrações.



3. GRDB

GRDB é uma biblioteca leve para trabalhar com SQLite em Swift. Ela oferece tanto acesso de baixo nível ao SQL quanto uma ORM de alto nível com tipos Record. É uma excelente escolha para quem deseja controlar consultas SQL, mas não quer escrevê-las manualmente.



Exemplo de código (GRDB)

import GRDB

// Definição da estruturastruct User: Codable, FetchableRecord, PersistableRecord { var id: Int64? var name: String var age: Int}

// Conexão ao BDlet dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")

// Salvandotry dbQueue.write { db in var user = User(name: "Алексей", age: 28) try user.insert(db)}

// Consultalet users = try dbQueue.read { db in try User.filter(Column("age") >= 18).fetchAll(db)}


Vantagens: leve, controle total sobre SQL, excelente documentação, suporte a Combine e Swift Concurrency.

Desvantagens: requer gerenciamento manual de migrações, não é tão "mágica" quanto Realm.



4. SwiftData (novidade da Apple)

SwiftData é uma ORM moderna, apresentada na WWDC 2023. Ela é construída sobre o Core Data, mas usando macros Swift (@Model, @Attribute, @Relationship). Permite descrever modelos diretamente no código.



Exemplo de código (SwiftData)

import SwiftDataimport SwiftUI

@Modelclass User { var name: String var age: Int init(name: String, age:

Recommendations