Escaping frente a non-escaping y autoclosures
Comprenda las closures non-escaping (predeterminadas) frente a @escaping (almacenadas o utilizadas después del retorno), y use @autoclosure para conseguir llamadas más legibles con evaluación diferida.
Escaping frente a non-escaping y autoclosures es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 3 lecciones en total.
Descripción general
Objetivo: Sepa cuándo un closure es no escapante (de forma predeterminada) frente a @escaping (almacenado o asíncrono), y cómo @autoclosure hace más limpios los sitios de llamada.
No escapante de forma predeterminada
Los parámetros de tipo closure son no escapantes de forma predeterminada: se invocan antes de que la función retorne y nunca se almacenan.
// 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) // 12Closure escapante
Marque el parámetro con @escaping si almacena el closure o lo ejecuta después del retorno, por ejemplo, en temporizadores o trabajos asíncronos.
// 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() }Finalización asíncrona
Las API asíncronas suelen recibir controladores de finalización @escaping, que se llaman después de que la función retorne.
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 permite que quien llama pase una expresión en lugar de escribir un closure, lo que mejora la legibilidad.
// @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 + escapante
@autoclosure @escaping almacena la expresión proporcionada para evaluarla más adelante; tenga en cuenta el estado capturado y el momento de evaluación.
// 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 thresholdRegla de escaping
Comprobación rápida: ¿Cuándo es necesario usar @escaping?
Resumen
Resumen: Los closures son no escapantes de forma predeterminada. Use @escaping si se almacenan o se llaman más adelante. Use @autoclosure para simplificar los sitios de llamada y combínelo con @escaping con cuidado.
Aprende Swift con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 122
- Lecciones
- 409
Preguntas frecuentes
¿La lección «Escaping frente a non-escaping y autoclosures» es gratis?
Sí — el texto completo de «Escaping frente a non-escaping y autoclosures» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 3 lecciones en total.
¿Qué aprenderé en «Escaping frente a non-escaping y autoclosures»?
Comprenda las closures non-escaping (predeterminadas) frente a @escaping (almacenadas o utilizadas después del retorno), y use @autoclosure para conseguir llamadas más legibles con evaluación diferid… Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 3.
¿Cuánto tiempo toma la lección «Escaping frente a non-escaping y autoclosures»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Fundamentos de closures y captura
- Listas de captura: weak/unowned y captura de valores
- Escaping frente a non-escaping y autoclosures