Escaping versus non-escaping e autoclosures
Entenda as closures non-escaping (padrão) em comparação com @escaping (armazenadas ou usadas após o retorno) e use @autoclosure para obter chamadas mais simples com avaliação tardia.
Escaping versus non-escaping e autoclosures é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 3 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 3 aulas no total.
Visão geral
Objetivo: saber quando uma closure é non-escaping (padrão) em vez de @escaping (armazenada ou assíncrona) e como @autoclosure torna os locais de chamada mais claros.
Padrão non-escaping
Por padrão, os parâmetros de closure são non-escaping — são chamados antes de a função retornar e nunca são armazenados.
// 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 que escapa
Marque o parâmetro com @escaping se armazenar a closure ou executá-la depois do retorno, como em temporizadores e operações assíncronas.
// 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() }Conclusão assíncrona
As APIs assíncronas normalmente recebem tratadores de conclusão @escaping, chamados depois que a função retorna.
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 quem chama passe uma expressão em vez de escrever uma closure, melhorando a legibilidade.
// @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 + escaping
@autoclosure @escaping armazena a expressão passada para avaliá-la mais tarde — tenha cuidado com o estado capturado e o momento da avaliação.
// 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 thresholdRegra de escaping
Verificação rápida: quando @escaping é necessário?
Recapitulação
Recapitulação: as closures são non-escaping por padrão. Use @escaping se forem armazenadas ou chamadas mais tarde. Use @autoclosure para locais de chamada mais claros e combine-a com @escaping com cuidado.
Aprenda Swift com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 122
- Aulas
- 409
Perguntas Frequentes
A aula “Escaping versus non-escaping e autoclosures” é grátis?
Sim — o texto completo de “Escaping versus non-escaping e autoclosures” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 3 aulas no total.
O que vou aprender em “Escaping versus non-escaping e autoclosures”?
Entenda as closures non-escaping (padrão) em comparação com @escaping (armazenadas ou usadas após o retorno) e use @autoclosure para obter chamadas mais simples com avaliação tardia. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 3.
Quanto tempo leva a aula “Escaping versus non-escaping e autoclosures”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Fundamentos de closures e captura
- Listas de captura — weak/unowned e captura de valores
- Escaping versus non-escaping e autoclosures