error handling
enum LoadError: Error { case missing }
func load(_ ok: Bool) throws -> String {
if !ok { throw LoadError.missing }
return "ok"
}
optional e guard
let city: String? = "Catania"
guard let city = city else { fatalError("no city") }
print(city)
funzioni
func saluta(_ nome: String) -> String {
"ciao \(nome)"
}
print(saluta("studio"))
mantieni le funzioni corte e con output prevedibile.
controllo di flusso
let level = 2
switch level {
case 1: print("base")
case 2: print("intermedio")
default: print("avanzato")
}
esercizi
crea un array di elementi e trasformalo con map.
struct Item { let id: Int; let name: String }
let items = [Item(id: 1, name: "A"), Item(id: 2, name: "B")]
let names = items.map { $0.name }
print(names)
panoramica
In questo capitolo su error handling lavoriamo su error handling, optional e guard, funzioni, controllo di flusso per creare micro-pattern riutilizzabili.
lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali.
badge: swift essentials
obiettivi
- capire e applicare error handling in uno scenario reale
- capire e applicare optional e guard in uno scenario reale
- capire e applicare funzioni in uno scenario reale
- capire e applicare controllo di flusso in uno scenario reale
scheda rapida
enum LoadError: Error { case missing }
func load(_ ok: Bool) throws -> String {
if !ok { throw LoadError.missing }
return "ok"
}
adatta questo scheletro agli esempi della lezione.
tips
- preferisci value types quando possibile
- usa guard per early exit
- mantieni le view leggere
- separa networking e ui
- scrivi test su logica critica
- mantieni error handling leggibile
tip: documenta ogni scelta architetturale.
mini progetto
crea un tracker di progetti con struct e collezioni.
- definisci Project
- aggiungi array di Project
- filtra e stampa
output atteso: lista progetti filtrata.
checklist
- ho eseguito gli snippet e controllato l'output
- ho annotato almeno 2 trade-off
- ho completato il mini progetto
- ho salvato un riepilogo personale