É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) // 12Fermeture é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 closureAutoclosure 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 thresholdRè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
- Notions de base sur les fermetures et leur capture
- Listes de capture — weak/unowned et capture de valeurs
- Échappantes contre non échappantes, autoclosures