Swift Academy · Aula

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

Aula 3 de 38 etapas

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.

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 “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

  1. Concorrência estruturada, funções assíncronas
  2. async let, Task e cancelamento
  3. try await e propagação de erros
← Voltar para Swift Academy