lezione 10

architettura swift

mvvm, di e separazione layer.

livello: avanzato durata: 38 min output: app scalabile badge: swift essentials

mvvm e di

protocol ProjectService { func load() -> [String] }
final class ProjectViewModel: ObservableObject {
  @Published var items: [String] = []
  let service: ProjectService
  init(service: ProjectService) { self.service = service }
}

protocol e conformità

protocol Renderable { func render() -> String }
struct Scene: Renderable {
  let name: String
  func render() -> String { "scene \(name)" }
}

classi e init

class Camera {
  let model: String
  init(model: String) { self.model = model }
}
let cam = Camera(model: "A7S")

extensions

extension String {
  var slug: String { lowercased().replacingOccurrences(of: " ", with: "-") }
}
print("Hello World".slug)

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 architettura swift lavoriamo su mvvm e di, protocol e conformità, classi e init, extensions 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 mvvm e di in uno scenario reale
  • capire e applicare protocol e conformità in uno scenario reale
  • capire e applicare classi e init in uno scenario reale
  • capire e applicare extensions in uno scenario reale

scheda rapida

protocol ProjectService { func load() -> [String] }
final class ProjectViewModel: ObservableObject {
  @Published var items: [String] = []
  let service: ProjectService
  init(service: ProjectService) { self.service = service }
}

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 mvvm e di 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
start a brief