Swift Academy · Aula

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.

Aula 3 de 38 etapas

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)  // 12

Closure 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 closure

Autoclosure + 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 threshold

Regra 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.

Grátis para começar

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

  1. Fundamentos de closures e captura
  2. Listas de captura — weak/unowned e captura de valores
  3. Escaping versus non-escaping e autoclosures
← Voltar para Swift Academy