Creare eccezioni custom in Swift
In un precedente articolo abbiamo visto come usare le eccezioni in Swift.
In questo vediamo come creare delle eccezioni custom.
In generale non è una cosa comune farlo, ma può essere utile sapere come si fa.
Partiamo semplicemente da questo esempio:
import Foundation
class Persona {
var nome: String;
var cognome: String;
init(nome: String, cognome: String) throws {
self.nome = nome
self.cognome = cognome
}
}
var p = Persona(nome: "", cognome: "")
print("(p.nome) \(p.cognome)")
Questo stamperà delle stringhe vuote.
Potremmo mettere un controllo con delle if in tutti i luoghi dove instanziamo Persona, oppure potremmo creare una eccezione per le stringhe vuote.
Ad esempio:
import Foundation
enum PersonaError: Error {
case nomeVuoto
case cognomeVuoto
// TUTTI GLI ALTRI ERRORI
case unexpected(code: Int)
}
extension PersonaError: LocalizedError {
public var errorDescription: String? {
switch self {
case .nomeVuoto:
return NSLocalizedString(
"Non è stato inserito un nome",
comment: "Si prega di inserire un valore"
)
case .cognomeVuoto:
return NSLocalizedString(
"Non è stato inserito un cognome",
comment: "Si prega di inserire un valore"
)
case .unexpected(_):
return NSLocalizedString(
"Errore generico",
comment: "Unexpected Error"
)
}
}
}
class Persona {
var nome: String;
var cognome: String;
init(nome: String, cognome: String) throws {
if nome.trimmingCharacters(in: .whitespacesAndNewlines) == "" {
throw PersonaError.nomeVuoto
}
if cognome.trimmingCharacters(in: .whitespacesAndNewlines) == "" {
throw PersonaError.cognomeVuoto
}
self.nome = nome
self.cognome = cognome
}
}
do {
var p = try Persona(nome: "m", cognome: "f")
print("\(p.nome) \(p.cognome)")
} catch PersonaError.nomeVuoto {
print(PersonaError.nomeVuoto.localizedDescription)
} catch PersonaError.cognomeVuoto {
print(PersonaError.cognomeVuoto.localizedDescription)
} catch let err {
print(err.localizedDescription)
}
Ovviamente questo è un codice di esempio da cui partire.
Anche se nella magior parte dei casi non ci servirà crearle, fate qualche prova!
Enjoy!
swift error localizederror
Commentami!