O Swift oferece suporte integrado para gerar e capturar erros recuperáveis no
tempo de execução. Por exemplo, se uma operação no código falhar ou não for válida, a
API vai gerar um erro HomeError. Isso simplifica e agiliza o tratamento de erros,
permitindo que você se concentre apenas nos erros recuperáveis. Em seguida, você pode oferecer
opções, como permitir que o usuário tente novamente ou exibir uma mensagem como
"Estrutura não encontrada". Como você não precisa lidar explicitamente com todas as
exceções possíveis, seu código fica menos confuso e, consequentemente, permanece mais
focado no objetivo principal.
Exemplo de como lidar com uma falha recuperável:
let light1 = lightDevices.first
if let light = light1 {
do {
try await structure.move(device: light, to: room)
} catch let error as HomeError {
// Code for handling the exception
}
A tabela a seguir mostra os significados dos códigos HomeError que você pode encontrar:
| Código | Significado |
|---|---|
aborted |
A operação foi cancelada. Isso geralmente aparece quando há um problema de simultaneidade, como uma falha na verificação de sequência ou um cancelamento de transação. |
alreadyExists |
O recurso ou a entidade que você está tentando criar já existe. Pode ser, por exemplo, uma programação com nome para um termostato. |
cancelled |
A operação foi cancelada, geralmente pelo chamador |
dataLoss |
Perda ou corrupção irrecuperável de dados. |
deadlineExceeded |
O prazo expirou antes que a operação fosse concluída. Para operações que alteram o estado do sistema, este erro pode ser retornado mesmo que a operação tenha sido concluída com sucesso. Por exemplo, uma resposta bem-sucedida de um servidor pode ter sido atrasada tempo suficiente para que o prazo expirasse. |
failedPrecondition |
A operação foi rejeitada porque o sistema não está no estado
necessário para a execução da operação. Por exemplo, você poderá receber
essa mensagem se chamar
stop
em um forno que já está desligado. |
internal |
Erros internos. Isso significa que algumas variantes esperadas pelo sistema subjacente foram interrompidas. Esse código do erro é reservado para erros graves. |
invalidArgument |
O cliente especificou um argumento inválido. Isso é diferente de "failedPrecondition". "invalidArgument" indica argumentos problemáticos, independentemente do estado do sistema (por exemplo, um nome de arquivo malformado). |
notFound |
Você especificou uma entidade ou um recurso que não foi encontrado. Por
exemplo, especificar um ID de rastreamento inexistente ao chamar
play em um dispositivo de player de mídia. |
outOfRange |
Um parâmetro excedeu o intervalo válido, com base no estado atual do sistema. Essa mensagem ocorre quando o valor está dentro do intervalo de valores que a chamada de API pode aceitar, mas não faz sentido no contexto atual. |
permissionDenied |
Você não tem permissão para executar a operação especificada. Esse código do erro não deve ser interpretado como se a solicitação fosse válida. |
resourceExhausted |
Alguns recursos foram esgotados. Por exemplo, isso pode ser gerado
quando alguém chama
dispense(item:amount:unit:presetName:) em um alimentador
de animais de estimação e não há mais comida na unidade.Isso também pode ser devido ao excesso de uma cota de projeto das APIs Home. Para mais informações, consulte Gerenciamento de cotas. |
unauthenticated |
Não é possível identificar o autor da chamada ou a solicitação não tem credenciais de autenticação válidas. |
unavailable |
O serviço está indisponível. Muito provavelmente, trata-se de uma condição temporária, que pode ser corrigida ao tentar novamente com uma espera. Nem sempre é seguro repetir operações não idempotentes. |
unimplemented |
A operação solicitada não foi implementada, permitida ou ativada neste serviço. |
unknown |
Erro desconhecido. Em geral, unknown aparece
quando ocorre uma condição de erro que não pode ser classificada usando nenhum dos
outros códigos do erro. Por exemplo, esse erro pode ser retornado quando um
valor de status recebido de uma API externa não tem informações
suficientes sobre a causa raiz. |