lezione 06

concurrency

async/await, actor e task isolate.

livello: avanzato durata: 35 min output: task concorrenti badge: swift essentials

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
start a brief