ORM für Swift (iOS/macOS): Vergleich und Anwendungsbeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

ORM für Swift (iOS/macOS): Vergleich und Beispiele



Bei der Entwicklung von Apps für iOS und macOS ist die Arbeit mit lokalen Daten eine der Kernaufgaben. Object-Relational Mapping (ORM) ermöglicht es Entwicklern, mit Datenbanken unter Verwendung eines objektorientierten Ansatzes zu arbeiten, anstatt rohe SQL-Abfragen zu schreiben. In diesem Artikel betrachten wir vier wichtige ORM-Lösungen für Swift: Core Data, Realm, GRDB und SwiftData. Sie erfahren ihre Stärken und Schwächen und sehen Codebeispiele für jede Technologie.



1. Core Data



Core Data ist ein Framework von Apple, das in iOS, macOS, tvOS und watchOS integriert ist. Es ist kein reines ORM (eher ein Persistenz-Framework), erfüllt aber alle ORM-Funktionen: Verwaltung des Objektmodells, Speicherung, Rückgängigmachen von Änderungen und Verknüpfung mit der UI über NSFetchedResultsController.



Vorteile:

  • Tiefe Integration in das Apple-Ökosystem (iCloud, SwiftUI, Combine)
  • Integrierte Unterstützung für Versionierung und Datenmigration
  • Leistungsstarke Prädikate und Sortierungen


Nachteile:

  • Komplexe Einrichtung und viel Boilerplate-Code
  • Probleme mit Multithreading (erfordert strikten Kontext)
  • Geringe Leistung bei großen Datenmengen


Anwendungsbeispiel:

import CoreData

// 1. Modell erstellen (im Xcode Data Model Editor)// 2. Container initialisierenlet container = NSPersistentContainer(name: "MyModel")container.loadPersistentStores { _, error in if let error = error { fatalError("Fehler beim Laden: \\(error)") }}

// 3. Objekt speichernlet context = container.viewContextlet user = User(context: context)user.name = "Ivan"user.age = 30try? context.save()

// 4. Abfragelet request: NSFetchRequest<User> = User.fetchRequest()request.predicate = NSPredicate(format: "age > %@", 18)let adults = try? context.fetch(request)


2. Realm



Realm ist ein beliebtes ORM von Drittanbietern, das für mobile Plattformen entwickelt wurde. Es ist in den meisten Szenarien schneller als Core Data und einfacher zu verwenden. Realm verwendet eine eigene Speicher-Engine, nicht SQLite.



Vorteile:

  • Hohe Lese-/Schreibgeschwindigkeit
  • Einfache API (ohne NSManagedObject)
  • Integrierte Unterstützung für reaktive Updates (über Realm Notifications)


Nachteile:

  • Geschlossener Code (nicht vollständig Open Source)
  • Probleme bei der Migration bei Modelländerungen
  • Eingeschränkte Unterstützung für komplexe Abfragen (JOIN, Unterabfragen)


Anwendungsbeispiel:

import RealmSwift

// 1. Modell definierenclass User: Object { @Persisted var name: String = "" @Persisted var age: Int = 0}

// 2. Erstellen und speichernlet realm = try! Realm()let user = User()user.name = "Maria"user.age = 25try! realm.write { realm.add(user)}

// 3. Abfragelet adults = realm.objects(User.self).filter("age > 18")


3. GRDB



GRDB ist ein leichtgewichtiges ORM für Swift, das auf SQLite aufbaut. Es bietet volle Kontrolle über SQL-Abfragen, stellt aber gleichzeitig eine komfortable objektorientierte Schnittstelle bereit. GRDB ist besonders beliebt bei Entwicklern, die die Leistungsfähigkeit von SQL mit dem Komfort von Swift kombinieren möchten.



Vorteile:

  • Vollständiger Zugriff auf SQL (komplexe Abfragen möglich)
  • Hohe Leistung (nahe an reinem SQLite)
  • Unterstützung für Swift Concurrency (async/await)


Nachteile:

  • Erfordert SQL-Kenntnisse
  • Weniger Dokumentation als Core Data
  • Keine integrierte iCloud-Unterstützung


Anwendungsbeispiel:

import GRDB

// 1. Modell definieren (Codable + FetchableRecord)struct User: Codable, FetchableRecord, PersistableRecord { var id: Int64? var name: String\

Empfehlungen