Tratamento de Exceção com erros customizados em Swift

Tratamento de Exceção com erros customizados em Swift

Utilizar erros customizados pode deixar seu código mais compreensível e organizado, pois adiciona uma "descrição" para determinados erros

Capa por Sigmund no Unsplash

Criação

Primeiro, precisamos pensar em um contexto para criar nossos erros. Vamos supor que existe um serviço que consome uma API que fornece dados sobre filmes, e iremos tratar os possíveis erros. Os erros mais comuns são:

  • Recurso não encontrado(404)
  • Proibido(403)
  • Erro interno(500)
  • Serviço Indisponível(503)

Os números associados aos erros são conhecidos como "Código de Status HTTP"(HTTP Status Code).

No trecho de código abaixo, iremos criar nossos erros customizados:

enum APIError: Error {
    case NotFound           // Recurso não encontrado
    case Forbidden          // Proibido
    case InternalError      // Erro interno
    case ServiceUnavailable // Indisponível
}

Usamos uma estrutura do tipo enum para definir o conjunto de erros que temos. Para dar continuidade, iremos supor que nosso serviço dispara exceções com os tipos definidos acima quando os respectivos códigos de status HTTP são recebidos.

Tratamento de Exceção

Agora que já temos um conjunto definido de erros, vamos ver como tratar nossas exceções. A linguagem Swift usa, para tratamento de exceções, uma estrutura conhecida como do-try-catch, que é escrita da seguinte forma:

do {
    try execute()
} catch(let exception){
    // Tratamento da exceção
}

Adequando o código acima para nosso cenário do serviço de filmes, e supondo que o serviço já está implementado, teríamos o seguinte:

do {
    // Tenta obter os dados do filme de id 5201
    try MovieService.getById(5201)
} catch(let exception){
    // Trata os erros
}

Podemos ir um pouco além do que já vimos. A estrutura do-try-catch permite que tratemos diferentes tipos de exceções, como se fosse um switch-case, da seguinte forma:

do {
    // Tenta obter os dados do filme de id 5201
    try MovieService.getById(5201)
} catch APIError.NotFound {
    // Trata o erro de "Recurso não encontrado
} catch APIError.Forbidden {
    // Trata o erro de "Proibido"
} catch APIError.InternalError {
    // Trata o erro de "Erro interno
} catch APIError.ServiceUnavailable {
    // Trata o erro de "Serviço Indisponível"
}

Com a estrutura acima, conseguimos tratar alguns dos erros mais comuns que podem ocorrer ao fazer uma requisição a um servidor. Vale destacar que não necessariamente essa é a melhor abordagem, mas ela é um bom exemplo de como tratar erros customizados usando a linguagem Swift.

Considerações

Caso você tenha interesse em descobrir mais sobre tratamento de exceções em Swift, você pode ler a documentação. Espero que essa explicação tenha te ajudado!

Gostou deste artigo? Me siga para mais conteúdos como esse!

Minhas redes sociais:

Twitter | Instagram | Youtube.

Até a próxima!👋🏽

Did you find this article valuable?

Support ReisDev by becoming a sponsor. Any amount is appreciated!