Swift:
Gestione degli errori
Come fare:
Swift utilizza la gestione degli errori con i blocchi do
, try
e catch
. Diamo un’occhiata:
enum FileError: Error {
case fileNonEsiste
case nessunPermesso
}
func leggiFile(alPercorso path: String) throws -> String {
// Facciamo finta di avere una logica qui per controllare se un file esiste e se abbiamo il permesso di leggerlo
let fileEsiste = false
let hoPermesso = true
if !fileEsiste {
throw FileError.fileNonEsiste
}
if !hoPermesso {
throw FileError.nessunPermesso
}
return "Il contenuto del file va qui"
}
do {
let contenutoFile = try leggiFile(alPercorso: "/percorso/al/file")
print(contenutoFile)
} catch FileError.fileNonEsiste {
print("Ops! File non trovato.")
} catch FileError.nessunPermesso {
print("Ah! Nessun permesso per leggere il file.")
} catch {
print("Si è verificato un errore sconosciuto.")
}
Output di Esempio:
Ops! File non trovato.
Approfondimento
La gestione degli errori non è sempre stata così sofisticata come lo è ora. In Objective-C, si doveva gestire con puntatori a oggetti NSError, il che sembrava goffo. Ora, abbiamo un sistema più elegante con gli enum di Swift e il protocollo Error
.
Il throw
di Swift ci consente di segnalare che qualcosa è andato storto. I blocchi do
agiscono come domini consapevoli degli errori, il prefisso try
chiama le operazioni rischiose, e catch
gestisce le cose se vanno male.
Le opzionali sono un’alternativa per situazioni che non sono proprio di “stato di errore” ma potrebbero comunque non avere “nessun risultato”. Sono un po’ come le variabili di Schrödinger—hanno un valore o non lo hanno.
Per una comprensione più approfondita, esaminare i tipi Result
, che sono ibridi raffinati tra modelli di ritorno regolari e schemi di errore.
Vedi Anche
- Guida ufficiale alla gestione degli errori in Swift: Documenti Apple
- Migliori pratiche per la gestione degli errori in Swift: RayWenderlich.com
- Gestione avanzata degli errori in Swift: Articolo su Medium