0Pricing
Swift Academy · Leçon

Relations et FetchDescriptor

Modéliser des relations un-à-plusieurs et effectuer des requêtes avec FetchDescriptor.

Relations et FetchDescriptor est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Relations SwiftData

Déclarez des relations entre les classes @Model à l’aide de propriétés Swift. SwiftData déduit automatiquement le type de relation.

@Model
class Author {
  var name: String
  @Relationship(deleteRule: .cascade) var books: [Book] = []
  init(name: String) { self.name = name }
}

Attribut @Relationship

Utilisez @Relationship pour spécifier explicitement les règles de suppression et les relations inverses.

@Model
class Book {
  var title: String
  var author: Author?
  init(title: String) { self.title = title }
}

Règles de suppression

Les règles de suppression déterminent ce qui arrive aux objets associés lorsque l’objet parent est supprimé : .nullify, .cascade, .deny.

// .cascade: deleting Author deletes all Books
// .nullify: deleting Author sets book.author to nil
// .deny: prevents deletion if related objects exist
@Relationship(deleteRule: .cascade) var books: [Book] = []

Relation un-à-plusieurs

Une relation un-à-plusieurs se déclare comme une propriété tableau du côté « un ».

@Model class Department {
  var name: String
  @Relationship(deleteRule: .cascade) var employees: [Employee] = []
  init(name: String) { self.name = name }
}
@Model class Employee {
  var name: String
  var department: Department?
  init(name: String) { self.name = name }
}

Relations plusieurs-à-plusieurs

Déclarez des tableaux des deux côtés pour créer une relation plusieurs-à-plusieurs.

@Model class Student {
  var name: String
  var courses: [Course] = []
  init(name: String) { self.name = name }
}
@Model class Course {
  var title: String
  var students: [Student] = []
  init(title: String) { self.title = title }
}

FetchDescriptor

FetchDescriptor remplace NSFetchRequest dans SwiftData. Configurez-le avec un prédicat, un tri et une limite de récupération.

var descriptor = FetchDescriptor<Book>(
  predicate: #Predicate { $0.title.contains("Swift") },
  sortBy: [SortDescriptor(\Book.title)]
)
descriptor.fetchLimit = 10
let books = try context.fetch(descriptor)

Tri avec SortDescriptor

Transmettez un tableau de SortDescriptor à FetchDescriptor pour effectuer un tri sur plusieurs colonnes.

let descriptor = FetchDescriptor<Item>(
  sortBy: [
    SortDescriptor(\Item.priority, order: .reverse),
    SortDescriptor(\Item.name)
  ]
)

Compter sans récupérer les données

Utilisez context.fetchCount pour compter les enregistrements correspondants sans charger tous les objets en mémoire.

let descriptor = FetchDescriptor<Book>(
  predicate: #Predicate { $0.rating > 4 }
)
let count = try context.fetchCount(descriptor)
print("High-rated books: \(count)")

Préchargement des relations

Définissez relationshipKeyPathsForPrefetching sur un FetchDescriptor pour charger de manière anticipée les objets associés.

var descriptor = FetchDescriptor<Author>()
descriptor.relationshipKeyPathsForPrefetching = [\Author.books]
let authors = try context.fetch(descriptor)

@Query avec des options de type FetchDescriptor

La macro @Query prend en charge les mêmes options de tri et de prédicat que FetchDescriptor.

@Query(
  filter: #Predicate<Book> { $0.author?.name == "Apple" },
  sort: \Book.title
)
var books: [Book]

Opérations par lots

SwiftData prend en charge les suppressions par lots via context.delete(model:where:) pour effectuer efficacement des opérations en masse.

try context.delete(model: Book.self, where: #Predicate { $0.rating < 2 })

Vérification rapide

Quel type SwiftData remplace NSFetchRequest pour récupérer des objets @Model avec filtrage et tri ?

Récapitulatif de la leçon

Déclarez les relations avec @Relationship(deleteRule:) sur les classes @Model. Utilisez FetchDescriptor avec #Predicate et SortDescriptor pour interroger les données. Utilisez fetchCount pour compter les éléments et la suppression par lots pour les supprimer en masse.

Questions Fréquemment Posées

La leçon « Relations et FetchDescriptor » est-elle gratuite ?

Oui — le texte complet de « Relations et FetchDescriptor » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Relations et FetchDescriptor » ?

Modéliser des relations un-à-plusieurs et effectuer des requêtes avec FetchDescriptor. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Relations et FetchDescriptor » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Pile Core Data : configuration de NSPersistentContainer
  2. SwiftData @Model et ModelContext
  3. Relations et FetchDescriptor
  4. Migrations légères et synchronisation CloudKit
← Retour à Swift Academy