Gestione degli errori su iOS

Swift fornisce un supporto integrato per l'attivazione e l'intercettazione di errori recuperabili in fase di runtime. 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 ottimizzata, consentendoti di 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 disordinato e, di conseguenza, rimane più concentrato 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 codici HomeError che potresti incontrare:

Tabella: codici HomeError
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à. Potrebbe trattarsi, ad esempio, di una programmazione con nome per un termostato.
cancelled L'operazione è stata annullata, in genere dal chiamante.
dataLoss Perdita o danneggiamento dei dati non recuperabili.
deadlineExceeded La scadenza è trascorsa prima che l'operazione potesse essere completata. Per le operazioni che modificano lo stato del sistema, questo errore potrebbe 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 si trova in uno stato richiesto per l'esecuzione dell'operazione. Ad esempio, potresti ricevere questo messaggio se hai chiamato stop su un forno che è già stato arrestato.
internal Errori interni. Ciò significa che alcuni invarianti previsti dal sistema sottostante sono stati violati. Questo codice di errore è riservato agli errori gravi.
invalidArgument Il client ha specificato un argomento non valido. Tieni presente che questo valore è 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, specificando un ID traccia inesistente quando si chiama play su un dispositivo di riproduzione multimediale.
outOfRange Un parametro ha superato l'intervallo valido, in base allo stato attuale del sistema. 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 disponi dell'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 state esaurite. Ad esempio, questo errore potrebbe essere generato quando un utente chiama dispense(item:amount:unit:presetName:) su un dispositivo per l'alimentazione degli animali domestici e non è rimasto cibo nell'unità.

Ciò potrebbe anche essere dovuto al superamento di una quota di progetto delle API Home. Per saperne di più, consulta Gestione delle quote.
unauthenticated Il chiamante non può essere identificato o la richiesta non dispone di credenziali di autenticazione valide.
unavailable Il servizio non è disponibile. Molto probabilmente si tratta di una condizione temporanea, 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 uno degli altri codici di errore. Ad esempio, questo errore potrebbe essere restituito quando un valore di stato ricevuto da un'API esterna non contiene informazioni sufficienti sulla causa principale.