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