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