0Pricing
Swift Academy · Leçon

Graphes mixtes de valeurs et de références

Découvrir la sémantique cachée des références dans les structures contenant des classes et apprendre à la gérer.

Graphes mixtes de valeurs et de références 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.

Bienvenue

Les structures peuvent contenir des classes comme propriétés stockées. Dans ce cas, la structure se comporte comme un type valeur à l’extérieur, mais partage la référence de classe en interne — un piège subtil.

Structure contenant une classe

```swift class Storage { var data: [Int] = [] } struct Container { var storage = Storage() var label: String = "" } var a = Container() var b = a // copies label, but SHARES storage! a.storage.data.append(1) print(b.storage.data) // [1] — shared! ```

Seules les propriétés valeur sont copiées

Lorsqu’une structure est copiée : • Les propriétés de type valeur (`label: String`) sont entièrement copiées • Pour les propriétés de type référence (`storage: Storage`), seul le pointeur est copié C’est ce qu’on appelle une *copie superficielle*.

Créer une copie profonde

```swift struct Container { var storage: Storage func deepCopy() -> Container { let newStorage = Storage() newStorage.data = storage.data // copy values return Container(storage: newStorage, label: label) } } ```

Le COW à la rescousse

Les collections de Swift évitent cela en utilisant le COW : ```swift struct SafeContainer { private(set) var storage = Storage() mutating func append(_ n: Int) { if !isKnownUniquelyReferenced(&storage) { storage = storage.copy() // copy before mutating } storage.data.append(n) } } ```

Classes contenant des structures

```swift class ViewModel { var point = CGPoint(x: 0, y: 0) // value type inside reference type } let vm1 = ViewModel() let vm2 = vm1 // same ViewModel! vm1.point.x = 5 print(vm2.point.x) // 5 — shared because ViewModel is a class ```

Identité et égalité

```swift class Dog { var name: String = "" } let x = Dog() let y = x print(x === y) // true — same object print(x !== y) // false let z = Dog() print(x === z) // false — different objects ```

Structure récursive par l’intermédiaire d’une classe

Les structures ne peuvent pas se référencer elles-mêmes, mais elles peuvent contenir une classe qui référence la structure : ```swift struct Tree { var value: Int var children: [Tree] // OK — Array uses class internally } ```

Détecter un partage inattendu

Utilisez `isKnownUniquelyReferenced` à l’exécution pour détecter le partage : ```swift var s = Storage() var r: AnyObject = s print(isKnownUniquelyReferenced(&s)) // true var s2 = s print(isKnownUniquelyReferenced(&s)) // false — shared ```

Recommandations de conception

Lorsqu’une structure doit contenir un état mutable de type référence : 1. Implémentez le COW pour rétablir la sémantique de valeur 2. Ou utilisez une classe immuable : `let` plutôt que `var` pour la propriété de classe 3. Ou repensez la conception — la structure devrait peut-être être une classe Documentez clairement les cas où le partage est intentionnel.

Vérification rapide

Lorsque vous copiez une structure contenant une propriété de classe, qu’advient-il de la classe ?

Récapitulatif

Points essentiels : • La copie d’une structure est superficielle — les références de classe sont partagées • `isKnownUniquelyReferenced` détecte le partage à l’exécution • Implémentez le COW pour rétablir une véritable sémantique de valeur • `===` / `!==` testent l’identité des objets pour les classes • Les structures récursives utilisent un tableau reposant sur une classe pour leurs enfants Ensuite : concevoir des API pour la sémantique de valeur.

Questions Fréquemment Posées

La leçon « Graphes mixtes de valeurs et de références » est-elle gratuite ?

Oui — le texte complet de « Graphes mixtes de valeurs et de références » 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 « Graphes mixtes de valeurs et de références » ?

Découvrir la sémantique cachée des références dans les structures contenant des classes et apprendre à la gérer. 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 « Graphes mixtes de valeurs et de références » ?

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 ou tas : où résident les valeurs
  2. Mutation, partage et aliasing inattendu
  3. Graphes mixtes de valeurs et de références
  4. Concevoir des interfaces pour la sémantique des valeurs
← Retour à Swift Academy