Swift fornisce il supporto integrato per l'invio e la cattura di errori recuperabili in fase di esecuzione. Ad esempio, se un'operazione nel codice non va a buon fine o non è valida, l'API genera un errore HomeError
. In questo modo, la gestione degli errori viene semplificata e snella, poiché ti consente di concentrarti solo sugli errori recuperabili. Puoi quindi fornire opzioni, ad esempio consentire all'utente di riprovare o mostrare un messaggio come "Struttura non trovata". Inoltre, poiché non devi gestire esplicitamente ogni possibile eccezione, il codice è meno ingombrante e, di conseguenza, rimane più incentrato sul suo scopo principale.
Un esempio di come gestire un errore recuperabile:
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
}
La tabella seguente illustra il significato dei codici HomeError
che potresti riscontrare:
Codice | Significato |
---|---|
aborted |
L'operazione è stata interrotta. Questo messaggio viene visualizzato in genere quando si verifica un problema di concorrenza, ad esempio un errore di controllo della sequenza o un interruzione della transazione. |
alreadyExists |
La risorsa o l'entità che stai tentando di creare esiste già. ad esempio una programmazione denominata per un termostato. |
cancelled |
L'operazione è stata annullata, in genere dal chiamante. |
dataLoss |
Perdita o danneggiamento di dati non recuperabili. |
deadlineExceeded |
La scadenza è scaduta prima del completamento dell'operazione. Per le operazioni che modificano lo stato del sistema, questo errore può essere restituito anche se l'operazione è stata completata correttamente. Ad esempio, una risposta corretta da un server potrebbe essere stata ritardata abbastanza da far scadere la scadenza. |
failedPrecondition |
L'operazione è stata rifiutata perché il sistema non è nello stato
richiesto per l'esecuzione dell'operazione. Ad esempio, potresti ricevere questo messaggio se hai chiamato stop su un forno già spento. |
internal |
Errori interni. Ciò significa che alcune invarianti previste dal sistema di base sono state violate. Questo codice di errore è riservato per errori gravi. |
invalidArgument |
Il client ha specificato un argomento non valido. Tieni presente che questo valore è diverso da "failedPrecondition". "invalidArgument" indica gli argomenti problematici indipendentemente dallo stato del sistema (ad esempio, un nome file con formato non valido). |
notFound |
Hai specificato un'entità o una risorsa che non è possibile trovare. Ad esempio, specificare un ID traccia inesistente quando si chiama
play su un dispositivo media player. |
outOfRange |
Un parametro ha superato l'intervallo valido, in base allo stato corrente del sistema. Questo messaggio viene visualizzato quando il valore rientra nell'intervallo di valori che la chiamata all'API potrebbe potenzialmente accettare, ma non ha senso nel contesto attuale. |
permissionDenied |
Non disponi dell'autorizzazione per eseguire l'operazione specificata. Questo codice di errore non deve essere interpretato come se la richiesta fosse valida. |
resourceExhausted |
Una risorsa è stata esaurita. Ad esempio, questo errore potrebbe verificarsi quando si chiama
dispense(item:amount:unit:presetName:) su un dispositivo per la distribuzione di cibo per animali domestici e non è rimasto più cibo nell'unità. |
unauthenticated |
L'utente che chiama non può essere identificato o la richiesta non ha credenziali di autenticazione valide. |
unavailable |
Il servizio non è disponibile. Molto probabilmente si tratta di una condizione transitoria, che può essere corretta riprovando con un backoff. Tieni presente che non è sempre sicuro riprovare le operazioni non idempotenti. |
unimplemented |
L'operazione richiesta non è implementata, supportata o abilitata in questo servizio. |
unknown |
Errore sconosciuto. In generale, unknown viene visualizzato
quando si verifica una condizione di errore che non può essere classificata utilizzando
nessuno degli altri codici di errore. Ad esempio, questo errore può essere restituito quando un valore di stato ricevuto da un'API esterna non contiene informazioni sufficienti sulla causa principale. |