throws ed Error
Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 44 di 56.
Swift gestisce gli errori facendo sì che le funzioni dichiarino che possono fallire. Il corpo della funzione genera un valore di errore; chi la chiama deve gestirlo.
Un tipo di errore è qualsiasi cosa conforme al protocollo integrato Error. Il modo più semplice per dichiararne uno tuo è usare un enum:
enum InputError: Error {
case empty
case tooLong
}Una funzione che genera un errore usa la parola chiave throws nella sua firma e l'istruzione throw nel suo corpo:
func validate(_ s: String) throws -> String {
if s.isEmpty { throw InputError.empty }
if s.count > 100 { throw InputError.tooLong }
return s
}Non puoi chiamare direttamente una funzione che genera un errore: il compilatore ti obbliga a gestire l’errore. La prossima lezione spiega come.
Sfida
FacileDefinisci un enum NumError: Error con due casi: negative e tooBig.
Definisci una funzione che genera errori doubleSafely(_ n: Int) throws -> Int che:
- Genera
.negativequandon < 0 - Genera
.tooBigquandon > 100 - Altrimenti restituisce
n * 2
Leggi un singolo intero da stdin. Chiama doubleSafely all'interno di un blocco do/catch (imparerai la forma esatta nella prossima lezione; per ora usa esattamente questo scheletro):
do {
let result = try doubleSafely(n)
print("ok: \(result)")
} catch NumError.negative {
print("negative")
} catch NumError.tooBig {
print("too big")
} catch {
print("unknown")
}Per l'input 10 l'output è ok: 20. Per -1 è negative. Per 500 è too big.
Provalo tu
let n = Int(readLine()!)!
// TODO: enum NumError: Error { case negative, tooBig }
// func doubleSafely(_ n: Int) throws -> Int { ... }
// do { let r = try doubleSafely(n); ... } catch NumError.negative { ... } ...
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Conteggio e indiciMaiuscole, minuscole e rimozione degli spaziRicerca nelle stringheSuddivisione e unioneSostituzione di sottostringheRiepilogo - Verifica del nome utente4Insiemi
Creare insiemiUnione e intersezioneDifferenza e differenza simmetricaSottoinsieme e sovrainsiemeRiepilogo - Filtro per tag7Progetto - Tracciatore di abitudini
Panoramica del progettoSegna come completato10Progetto - Motore di quiz
Panoramica del progettoPorre domande2Intervalli e passi
Intervalli chiusi e semiapertiPassoMetodi degli intervalliIntervalli in switchRiepilogo - Griglia del calendario5Funzioni di ordine superiore Parte 1
MapFilterReduceConcatenare map, filter e reduceRiepilogo - Statistiche sulle parole3Dizionari
Dichiarare i dizionariRicerca facoltativaAggiornare i dizionariIterare sui dizionariRaggruppare i valoriRipasso - Inventario6Funzioni di ordine superiore Parte 2
compactMapflatMapsorted(by:)Creare pipelineRiepilogo - Classifica9Gestione degli errori
throws ed Errordo, try, catchtry? e try!Propagazione degli erroriRipasso - Calcolatrice sicuraEsercitati da solo: Playground Swift