0Pricing
Swift Academy · Leçon

Échappantes contre non échappantes, autoclosures

Comprenez les fermetures non échappantes (par défaut) et les fermetures @escaping (stockées ou utilisées après le retour), puis utilisez @autoclosure pour simplifier les appels grâce à l’évaluation différée.

Échappantes contre non échappantes, autoclosures est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 3. 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 3 leçons au total.

Vue d'ensemble

Objectif : savoir quand une fermeture est non échappante (par défaut) ou @escaping (stockée ou asynchrone), et comment @autoclosure rend les sites d'appel plus lisibles.

Non échappante par défaut

Les paramètres de fermeture sont non échappants par défaut : ils sont appelés avant le retour de la fonction et ne sont jamais stockés.

// Non-escaping by default: used immediately inside the function.
func applyTwice(_ f: (Int) -> Int, to x: Int) -> Int {
    return f(f(x))   // called synchronously; not stored
}
let doubled = applyTwice({ $0 * 2 }, to: 3)
print(doubled)  // 12

Fermeture échappante

Marquez le paramètre avec @escaping si vous stockez la fermeture ou l'exécutez après le retour de la fonction, par exemple pour des minuteurs ou des opérations asynchrones.

// Need @escaping when storing for later use:
var tasks: [() -> Void] = []

func addTask(_ work: @escaping () -> Void) {
    tasks.append(work)  // stored to run later
}

addTask { print("run later") }
tasks.forEach { $0() }

Achèvement asynchrone

Les API asynchrones prennent généralement des gestionnaires d'achèvement @escaping, appelés après le retour de la fonction.

func fetchData(completion: @escaping (String) -> Void) {
    // simulate async: call completion in the future
    // (In real apps, use DispatchQueue or URLSession)
    completion("done")  // still escaping by contract (may be called later)
}
fetchData { result in print(result) }

Autoclosure

@autoclosure permet aux appelants de transmettre une expression au lieu d'écrire une fermeture, ce qui améliore la lisibilité.

// @autoclosure converts an expression into () -> Bool automatically.
func logIf(_ condition: @autoclosure () -> Bool) {
    if condition() { print("Condition is true") }
}

let x = 3
logIf(x > 1)       // no braces needed; expression is turned into a closure

Autoclosure et échappement

@autoclosure @escaping stocke l'expression transmise pour l'évaluer plus tard : soyez attentif à l'état capturé et au moment de l'évaluation.

// You can combine @autoclosure with @escaping:
// (be careful: the expression is captured and evaluated later)
var checks: [() -> Bool] = []

func enqueueCheck(_ condition: @autoclosure @escaping () -> Bool) {
    checks.append(condition)   // stored to run later
}

var threshold = 10
enqueueCheck(threshold > 5)   // captures current variable by reference semantics
threshold = 3
print(checks.map { $0() })    // re-evaluates with updated threshold

Règle d'échappement

Vérification rapide : quand @escaping est-il nécessaire ?

Récapitulatif

Récapitulatif : les fermetures sont non échappantes par défaut. Utilisez @escaping si elles sont stockées ou appelées ultérieurement. Utilisez @autoclosure pour des sites d'appel plus lisibles et combinez-le avec @escaping avec précaution.

Questions Fréquemment Posées

La leçon « Échappantes contre non échappantes, autoclosures » est-elle gratuite ?

Oui — le texte complet de « Échappantes contre non échappantes, autoclosures » 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 3 leçons au total.

Qu'est-ce que j'apprendrai dans « Échappantes contre non échappantes, autoclosures » ?

Comprenez les fermetures non échappantes (par défaut) et les fermetures @escaping (stockées ou utilisées après le retour), puis utilisez @autoclosure pour simplifier les appels grâce à l’évaluation d… 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 3.

Combien de temps prend la leçon « Échappantes contre non échappantes, autoclosures » ?

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. Notions de base sur les fermetures et leur capture
  2. Listes de capture — weak/unowned et capture de valeurs
  3. Échappantes contre non échappantes, autoclosures
← Retour à Swift Academy