ORM pour Swift (iOS/macOS) : comparaison et exemples d'utilisation

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

ORM pour Swift (iOS/macOS) : comparaison et exemples



Lors du développement d'applications pour iOS et macOS, la gestion des données locales est une tâche clé. L'Object-Relational Mapping (ORM) permet aux développeurs de travailler avec des bases de données en utilisant une approche orientée objet, au lieu d'écrire des requêtes SQL brutes. Dans cet article, nous examinerons quatre solutions ORM principales pour Swift : Core Data, Realm, GRDB et SwiftData. Vous découvrirez leurs forces et faiblesses, ainsi que des exemples de code pour chaque technologie.



1. Core Data



Core Data est un framework d'Apple intégré dans iOS, macOS, tvOS et watchOS. Ce n'est pas un ORM pur (plutôt un framework de persistance), mais il remplit toutes les fonctions d'un ORM : gestion du modèle objet, sauvegarde, annulation des modifications et liaison avec l'interface utilisateur via NSFetchedResultsController.



Avantages :

  • Intégration profonde avec l'écosystème Apple (iCloud, SwiftUI, Combine)
  • Support intégré du versionnement et de la migration des données
  • Prédicats et tris puissants


Inconvénients :

  • Configuration complexe et beaucoup de code boilerplate
  • Problèmes de multithreading (contexte strict requis)
  • Faibles performances avec de grands volumes de données


Exemple d'utilisation :

import CoreData

// 1. Créer un modèle (dans l'éditeur de modèle de données Xcode)// 2. Initialiser le conteneurlet container = NSPersistentContainer(name: "MyModel")container.loadPersistentStores { _, error in if let error = error { fatalError("Échec du chargement : \\(error)") }}

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

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


2. Realm



Realm est un ORM tiers populaire conçu pour les plateformes mobiles. Il est plus rapide que Core Data dans la plupart des scénarios et plus simple à utiliser. Realm utilise son propre moteur de stockage, pas SQLite.



Avantages :

  • Haute vitesse de lecture/écriture
  • API simple (sans NSManagedObject)
  • Support intégré des mises à jour réactives (via Realm Notifications)


Inconvénients :

  • Code fermé (pas entièrement open-source)
  • Problèmes de migration lors des modifications de modèle
  • Support limité des requêtes complexes (JOIN, sous-requêtes)


Exemple d'utilisation :

import RealmSwift

// 1. Définir le modèleclass User: Object { @Persisted var name: String = "" @Persisted var age: Int = 0}

// 2. Créer et sauvegarderlet realm = try! Realm()let user = User()user.name = "Maria"user.age = 25try! realm.write { realm.add(user)}

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


3. GRDB



GRDB est un ORM léger pour Swift, construit sur SQLite. Il offre un contrôle total sur les requêtes SQL tout en fournissant une interface orientée objet pratique. GRDB est particulièrement populaire parmi les développeurs qui souhaitent combiner la puissance de SQL avec la commodité de Swift.



Avantages :

  • Accès complet à SQL (possibilité d'écrire des requêtes complexes)
  • Haute performance (proche du SQLite pur)
  • Support de Swift Concurrency (async/await)


Inconvénients :

  • Nécessite la connaissance de SQL
  • Moins de documentation que Core Data
  • Pas de support intégré pour iCloud


Exemple d'utilisation :

import GRDB

// 1. Définir le modèle (Codable + FetchableRecord)struct User: Codable, FetchableRecord, PersistableRecord { var id: Int64? var name: String\

Recommendations