0Pricing
Swift Academy · Leçon

Listes de capture des fermetures et [weak self]

Utiliser les listes de capture pour empêcher les fermetures de capturer fortement des objets.

Listes de capture des fermetures et [weak self] est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 4 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 fermetures capturent les variables de leur portée environnante. Les listes de capture (`[weak self]`, `[unowned self]`, `[value]`) contrôlent précisément la manière dont ces captures sont effectuées.

Capture forte par défaut

```swift var name = "Alice" let greet = { print("Hello, \(name)") } name = "Bob" greet() // "Hello, Bob" — closure sees current value ``` Par défaut, les fermetures capturent des références vers les variables.

Principes des listes de capture

```swift var count = 10 let snapshot = { [count] in print(count) } // captures value count = 99 snapshot() // 10 — snapshot of count at capture time ``` Le fait d’indiquer un type valeur dans `[]` copie la valeur au moment où la fermeture est créée.

Modèle [weak self]

```swift class API { func fetch(completion: @escaping () -> Void) { ... } } class VC { func load() { api.fetch { [weak self] in guard let self else { return } // self might be nil by now self.updateUI() } } } ```

Liaison guard let self avec durée de vie prolongée

Swift 5.3+ : liez de nouveau `self` dans la condition `guard` sans créer de variable masquée : ```swift { [weak self] in guard let self else { return } // 'self' is now strong within this block doA() doB() doC() } ```

[unowned self] : quand l’utiliser sans danger

```swift button.addTarget(self, action: #selector(tap), for: .touchUpInside) // If the button's closure is guaranteed not to outlive self: let action: () -> Void = { [unowned self] in self.handleTap() } ```

Capturer plusieurs valeurs

```swift let base = 100 let multiplier = 2 let compute = { [base, multiplier] in base * multiplier } print(compute()) // 200 ``` Capturez plusieurs valeurs dans la même liste, en les séparant par des virgules.

Liste de capture avec liaisons nommées

```swift let myService = service // rename in capture list: let handler = { [service = myService] in service.process() } ``` Utile pour capturer un instantané précis sous un nouveau nom.

Échappement et absence d’échappement

• Une fermeture `@escaping` peut être stockée et appelée après le retour de la fonction → risque de cycles • Une fermeture sans échappement est appelée avant le retour de la fonction → aucun risque de cycle ```swift func apply(_ f: () -> Void) { f() } // non-escaping, no [weak] needed func later(_ f: @escaping () -> Void) { queue.async { f() } } // escaping ```

Déboguer les problèmes de capture

Si vous suspectez un cycle : 1. Ajoutez `deinit { print("deallocated") }` à la classe 2. Accédez à un autre écran ou affectez nil à l’instance 3. Si deinit n’affiche rien → un cycle existe Ajoutez ensuite `[weak self]` aux fermetures de cette classe.

Vérification rapide

Que fait `[weak self]` dans une liste de capture ?

Récapitulatif

Points clés : • Les fermetures capturent les références par défaut • La liste de capture `[value]` copie les types valeur au moment de la création • `[weak self]` — aucune rétention, nil automatique, utilisez `guard let self` • `[unowned self]` — aucune rétention, ne protège pas contre nil • Les fermetures `@escaping` nécessitent des listes de capture ; les fermetures sans échappement n’en ont généralement pas besoin Cours terminé ! Ensuite : la programmation fonctionnelle en Swift.

Questions Fréquemment Posées

La leçon « Listes de capture des fermetures et [weak self] » est-elle gratuite ?

Oui — le texte complet de « Listes de capture des fermetures et [weak self] » 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 « Listes de capture des fermetures et [weak self] » ?

Utiliser les listes de capture pour empêcher les fermetures de capturer fortement des objets. 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 4 sur 4.

Combien de temps prend la leçon « Listes de capture des fermetures et [weak self] » ?

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. Comment ARC compte les références
  2. Cycles de rétention : causes et détection
  3. Références weak et unowned
  4. Listes de capture des fermetures et [weak self]
← Retour à Swift Academy