Aula 28: Tratamento de Erros com do-try-catch
O tratamento de erros é um aspecto crítico no desenvolvimento de aplicações robustas. No Swift, você pode lidar com erros de forma elegante utilizando a sintaxe do-try-catch
. Nesta aula, vamos explorar como definir erros, lançá-los e tratá-los com do
, try
e catch
.
Definindo um Erro
No Swift, você pode definir seus próprios tipos de erro conformando-se ao protocolo Error
. Uma forma de estruturar a representação dos possíveis erros em sua aplicação é utilizando uma enumeração.
enum ErroDeArquivo: Error {
case arquivoNaoEncontrado
case permissoesInsuficientes
case desconhecido
}
Lançando Erros
Você pode definir funções que lançam erros utilizando a palavra-chave throws
. Dentro dessas funções, você pode usar a instrução throw
para sinalizar que ocorreu um erro.
func lerArquivo(caminho: String) throws -> String {
// Simulando uma operação de leitura de arquivo
guard caminho == "caminhoValido.txt" else {
throw ErroDeArquivo.arquivoNaoEncontrado
}
// Simulando leitura bem-sucedida do arquivo
return "Conteúdo do arquivo"
}
Neste exemplo, a função lerArquivo
lançará um erro ErroDeArquivo.arquivoNaoEncontrado
se o caminho fornecido não for válido.
Tratando Erros com do-try-catch
Para tratar erros potenciais lançados por uma função, você pode usar a sintaxe do-try-catch
. A função que pode lançar um erro é chamada utilizando a palavra-chave try
dentro de um bloco do
. Se um erro for lançado, a execução salta para o bloco catch
apropriado.
do {
let conteudo = try lerArquivo(caminho: "caminhoInvalido.txt")
print(conteudo)
} catch ErroDeArquivo.arquivoNaoEncontrado {
print("Erro: O arquivo não foi encontrado.")
} catch ErroDeArquivo.permissoesInsuficientes {
print("Erro: Você não tem permissão para acessar este arquivo.")
} catch {
print("Erro: Ocorreu um erro desconhecido.")
}
Neste código, ao chamar lerArquivo
com um caminho inválido, um erro é lançado e capturado no bloco catch
correspondente. Você pode definir múltiplos blocos catch
para tratar diferentes tipos de erros.
Propagando Erros
Às vezes, você pode querer propagar erros de uma função para outra, em vez de tratá-los imediatamente. Isso pode ser feito marcando a função com throws
e permitindo que o erro suba na pilha de chamadas.
func processarArquivo(caminho: String) throws {
let conteudo = try lerArquivo(caminho: caminho)
print("Processando conteúdo do arquivo: \(conteudo)")
}
// Chamando a função e tratando erros potenciais
do {
try processarArquivo(caminho: "caminhoValido.txt")
} catch {
print("Falha ao processar o arquivo: \(error)")
}
Neste caso, processarArquivo
chama lerArquivo
, e se lerArquivo
lançar um erro, este será propagado para o bloco do
onde processarArquivo
foi chamado.
Conclusão
Nesta aula, exploramos os fundamentos do tratamento de erros no Swift utilizando do-try-catch
. Você aprendeu como definir erros personalizados, lançar erros em funções e tratar erros de maneira elegante utilizando as palavras-chave do
, try
e catch
. O tratamento de erros é essencial para criar aplicações resilientes, portanto, certifique-se de incorporar essas práticas em seu código!