Swift fornisce il supporto integrato per generare e rilevare errori recuperabili in fase di runtime. Ad esempio, se un'operazione nel codice non riesce o non è valida, l'API genera un errore HomeError. In questo modo, la gestione degli errori viene semplificata e ottimizzata, in quanto puoi concentrarti solo sugli errori recuperabili. Puoi quindi fornire opzioni, ad esempio consentire all'utente di riprovare o visualizzare 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.
Ecco 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 fornisce i significati dei
HomeError codici che potresti
riscontrare:
| Codice | Significato |
|---|---|
aborted |
L'operazione è stata interrotta. In genere, questo errore viene visualizzato 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, potrebbe trattarsi di una pianificazione denominata per un termostato. |
cancelled |
L'operazione è stata annullata, in genere dal chiamante. |
dataLoss |
Perdita o danneggiamento dei dati non recuperabili. |
deadlineExceeded |
La scadenza è scaduta prima che l'operazione potesse essere completata. 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 positiva da un server potrebbe essere stata ritardata abbastanza da far scadere la scadenza. |
failedPrecondition |
L'operazione è stata rifiutata perché il sistema non è in uno 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 sottostante sono state violate. Questo codice di errore è riservato agli errori gravi. |
invalidArgument |
Il client ha specificato un argomento non valido. Tieni presente che questo è diverso da `failedPrecondition`. `invalidArgument` indica argomenti problematici indipendentemente dallo stato del sistema (ad esempio, un nome file 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 lettore multimediale. |
outOfRange |
Un parametro ha superato l'intervallo valido, in base allo stato attuale del sistema stato. Questo messaggio viene visualizzato quando il valore rientra nell'intervallo di valori che la chiamata API potrebbe potenzialmente accettare, ma non ha senso nel contesto attuale. |
permissionDenied |
Non hai l'autorizzazione per eseguire l'operazione specificata. Questo codice di errore non deve essere interpretato nel senso che la richiesta è altrimenti valida. |
resourceExhausted |
Alcune risorse sono esaurite. Ad esempio, questo errore potrebbe essere generato
quando si chiama
dispense(item:amount:unit:presetName:) su un dispositivo di alimentazione per animali domestici e non è rimasto altro cibo nell'unità.Questo potrebbe anche essere dovuto al superamento di una quota del progetto delle API Home. Per saperne di più, consulta Gestione delle quote. |
unauthenticated |
Il chiamante non può essere identificato o la richiesta non ha credenziali di autenticazione valide. |
unavailable |
Il servizio non è disponibile. Si tratta molto probabilmente di una condizione temporanea, che può essere corretta riprovando con un backoff. Tieni presente che non è sempre sicuro riprovare a eseguire 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. |