async/await
func fetchTitle() async -> String { "swift" }
Task {
let title = await fetchTitle()
print(title)
}
actor e isolamento
actor Counter {
private var value = 0
func inc() { value += 1 }
func get() -> Int { value }
}
error handling
enum LoadError: Error { case missing }
func load(_ ok: Bool) throws -> String {
if !ok { throw LoadError.missing }
return "ok"
}
controllo di flusso
let level = 2
switch level {
case 1: print("base")
case 2: print("intermedio")
default: print("avanzato")
}
esercizi
definisci una funzione async e consuma il risultato.
func load() async -> [String] { ["A", "B"] }
Task {
let items = await load()
print(items.count)
}
panoramica
In questo capitolo su concurrency lavoriamo su async/await, actor e isolamento, error handling, 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 async/await in uno scenario reale
- capire e applicare actor e isolamento in uno scenario reale
- capire e applicare error handling in uno scenario reale
- capire e applicare controllo di flusso in uno scenario reale
scheda rapida
func fetchTitle() async -> String { "swift" }
Task {
let title = await fetchTitle()
print(title)
}
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
- gestisci timeout e cancellazioni
tip: documenta ogni scelta architetturale.
mini progetto
crea un loader async con Task e gestione errori.
- scrivi funzione async
- avvia Task
- mostra risultato
output atteso: task completato.
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