try await e propagação de erros
Use try await com funções assíncronas que lançam erros, trate falhas com do/catch e propague os erros corretamente (incluindo CancellationError ).
try await e propagação de erros é 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.
Por que usar try await?
try await chama uma função assíncrona que lança erros. Se ela lançar um erro, o erro será propagado, a menos que você o capture. Você também pode usar try? para convertê-lo em Optional.
Assíncrona que lança erros + do/catch
Crie uma função assíncrona que lança erros e chame-a com try await dentro de do/catch para tratar falhas.
enum NetError: Error { case offline; case badStatus(Int) }
func fetchNumber(from ok: Bool) async throws -> Int {
try await Task.sleep(nanoseconds: 100_000_000)
if !ok { throw NetError.offline }
return 7
}
Task {
do {
let n = try await fetchNumber(from: true)
print("value:", n) // 7
} catch {
print("failed:", error) // handled here
}
}Conversão de erros
Use try? para obter um Optional em vez de lançar um erro. Evite try!, a menos que tenha certeza de que não haverá falha.
Task {
// try? converts failure to nil
let maybe = try? await fetchNumber(from: false)
print("optional result:", String(describing: maybe)) // nil on error
// ⚠️ try! will crash if an error is thrown — avoid in production
// let forced = try! await fetchNumber(from: false)
}Propagação de erros
Marque os chamadores como async throws para propagar erros para níveis superiores; eles poderão ser tratados em uma fronteira mais alta.
func loadProfile(ok: Bool) async throws -> String {
let id = try await fetchNumber(from: ok) // propagate on error
return "id:\\(id)"
}
Task {
do {
let s = try await loadProfile(ok: true)
print(s) // "id:7"
} catch {
print("propagated:", error)
}
}Capturas específicas
Use blocos catch com correspondência de padrões. Trate CancellationError primeiro para manter os caminhos de encerramento rápidos e silenciosos.
enum FileError: Error { case notFound }
func mightCancel() async throws {
for _ in 0..<5 {
try Task.checkCancellation() // throws CancellationError
try await Task.sleep(nanoseconds: 30_000_000)
}
}
Task {
let t = Task { try await mightCancel() }
t.cancel()
do {
try await t.value
} catch is CancellationError {
print("cancelled cleanly") // handle cancellation separately
} catch {
print("other error:", error)
}
}Diretrizes
Dicas:
- Propague com try até uma fronteira que possa decidir (interface do usuário, CLI ou Task de nível superior).
- Prefira erros de domínio (enumerações) para obter clareza.
- Converta com try? somente quando a ausência for aceitável.
- Capture CancellationError de forma distinta.
Tratamento de erros com try await
Verificação rápida: o que try await f() faz com os erros?
Recapitulação
Recapitulação: use try await com funções assíncronas que lançam erros, propague os erros dos auxiliares para níveis superiores, converta com try? quando um valor opcional for suficiente e capture CancellationError explicitamente.
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 “try await e propagação de erros” é grátis?
Sim — o texto completo de “try await e propagação de erros” é 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 “try await e propagação de erros”?
Use try await com funções assíncronas que lançam erros, trate falhas com do/catch e propague os erros corretamente (incluindo CancellationError ). 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 “try await e propagação de erros”?
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
- Concorrência estruturada, funções assíncronas
- async let, Task e cancelamento
- try await e propagação de erros