0Pricing
Swift Academy · Leçon

Capturer des valeurs par référence

Comprenez comment les fermetures capturent l’état environnant.

Capturer des valeurs par référence est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.

Ce que capturent les fermetures

Une fermeture capture les variables et les constantes de la portée environnante auxquelles elle fait référence. Les variables capturées sont conservées par référence ; la fermeture voit donc les modifications ultérieures.

Capturer une constante

La fermeture se souvient de greeting même après le retour de la fonction :

func makeGreeter() -> () -> String {
    let greeting = "Hello"
    return { greeting }
}
let greet = makeGreeter()
print(greet())  // "Hello"

Capturer une variable par référence

Comme count est une variable, la fermeture modifie le même espace de stockage d’un appel à l’autre :

func makeCounter() -> () -> Int {
    var count = 0
    return {
        count += 1
        return count
    }
}
let next = makeCounter()
print(next(), next(), next())  // 1 2 3

Espace de stockage partagé

Deux fermetures peuvent capturer la même variable et voir les modifications de l’autre :

func makePair() -> (() -> Void, () -> Int) {
    var value = 0
    let inc = { value += 1 }
    let read = { value }
    return (inc, read)
}
let (inc, read) = makePair()
inc(); inc()
print(read())  // 2

La capture reflète les modifications ultérieures

La fermeture lit la valeur actuelle de la variable au moment de l’appel, et non sa valeur au moment où la fermeture a été créée :

var message = "first"
let show = { print(message) }
message = "second"
show()  // "second"

Capture par référence ou par valeur

Par défaut, une variable mutable est capturée par référence. Si vous souhaitez figer une copie de sa valeur au moment de la création, indiquez-la dans une liste de capture, comme [x].

Figer une valeur

Une liste de capture copie immédiatement la valeur :

var n = 10
let frozen = { [n] in n }   // copies 10 now
n = 99
print(frozen())  // 10

Chaque fermeture possède un état indépendant

Chaque appel à la fabrique crée une nouvelle variable capturée :

func counter() -> () -> Int {
    var c = 0
    return { c += 1; return c }
}
let a = counter(), b = counter()
print(a(), a(), b())  // 1 2 1

Capturer dans une boucle

Sans précaution, les fermetures d’une boucle peuvent partager la même variable. Utilisez une liste de capture pour créer un instantané à chaque itération :

var closures: [() -> Int] = []
for i in 1...3 {
    closures.append { [i] in i }
}
print(closures.map { $0() })  // [1, 2, 3]

Capturer self dans une méthode

Une fermeture créée à l’intérieur d’une méthode capture l’instance environnante, ce qui lui permet de lire et de modifier les propriétés ultérieurement :

class Bank {
    var balance = 0
    func deposit() -> () -> Void {
        return { self.balance += 10 }
    }
}
let bank = Bank()
let add = bank.deposit()
add(); add()
print(bank.balance)  // 20

Pourquoi c’est important

La capture par référence permet de créer des compteurs, des accumulateurs et des rappels avec état — mais elle signifie aussi qu’une fermeture peut maintenir des objets en vie ; nous verrons ensuite comment gérer cela avec les listes de capture.

func accumulator() -> (Int) -> Int {
    var total = 0
    return { total += $0; return total }
}
let add = accumulator()
print(add(10), add(5))  // 10 15

Vérification rapide

Comment une variable mutable est-elle capturée par défaut par une fermeture ?

Récapitulatif

Vous avez appris la sémantique des captures :

  • Les fermetures capturent les variables référencées dans leur portée
  • Les variables mutables sont capturées par référence — les modifications et les mutations sont partagées
  • Une liste de capture [x] fige une copie de la valeur au moment de la création
  • Cela permet de créer des compteurs et des rappels avec état

Ensuite : les fermetures échappantes.

Questions Fréquemment Posées

La leçon « Capturer des valeurs par référence » est-elle gratuite ?

Oui — le texte complet de « Capturer des valeurs par référence » 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 « Capturer des valeurs par référence » ?

Comprenez comment les fermetures capturent l’état environnant. 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 1 sur 4.

Combien de temps prend la leçon « Capturer des valeurs par référence » ?

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. Capturer des valeurs par référence
  2. Fermetures échappantes
  3. Listes de capture et self faible
  4. Fermetures automatiques
← Retour à Swift Academy