@c, module selectors, performance controls
typed systems / app / server / package
Swift
Un percorso da ingegneria del codice: domini modellati con tipi, concorrenza controllata, networking reale, test, package e consegna. Non una pagina vetrina: una toolchain da portare in produzione.
Baseline verificata il 4 maggio 2026
La versione non è un badge: decide strumenti, vincoli e opportunità.
Swift 6.3.1, Swift Build in preview dentro SwiftPM
warning issues, cancellation, image attachments
SDK Android ufficiale, embedded e cross-platform
Risultati attesi
Competenze come protocolli: piccole, esplicite, componibili.
Modellare prima di codare
Usare tipi, enum e stati espliciti per rappresentare il dominio invece di inseguire bug con controlli sparsi.
Scrivere Swift idiomatico
Capire quando scegliere struct, class, protocol, generic o semplice funzione, con API che leggono come intenzioni.
Gestire fallimenti reali
Progettare errori, optionals, JSON imperfetti, rete instabile e fallback senza trasformare tutto in if difensivi.
Ragionare sulla concurrency
Usare async/await, actor e isolamento Swift 6 con attenzione a cancellazione, MainActor e dati condivisi.
Consegnare un package
Organizzare moduli, test, documentazione DocC e dipendenze con SwiftPM, pensando già alla manutenzione.
Scegliere una traccia
Portare lo stesso nucleo Swift verso app native, server, CLI o librerie senza riscrivere il dominio ogni volta.
Ciclo didattico
Ogni lezione passa da problema, limite e refactor.
Swift si impara quando il compilatore diventa un collaboratore: prima si espone l'ambiguità, poi si stringe il modello finché il codice sbagliato diventa difficile da scrivere.
- 01Problema reale
- 02Tentativo ingenuo
- 03Limite del codice
- 04Concetto Swift
- 05Refactor
- 06Esercizio
- 07Checklist di giudizio
Build plan
Dieci moduli come milestone di un package reale.
Capire come pensa Swift prima di imparare la lista dei costrutti.
Fondamenta mentali di Swift
Swift viene presentato come linguaggio di valori, sicurezza ed espressività. Variabili, costanti e controllo di flusso entrano dentro un dominio concreto, evitando l'effetto lezione scolastica.
- 01 Perché Swift pensa in modo diverso
- 02 Value types e reference types
- 03 Mutabilità, immutabilità e copia
- 04 Optionals come modello di assenza
- 05 Type inference, safety ed espressività
- 06 Laboratorio: dominio carrello
Deliverablemodellare un piccolo dominio con ordini, utenti, prodotti e carrello
Trasformare regole reali in tipi Swift difficili da usare male.
Modellazione del dominio
Questo è il cuore del corso: struct, class, enum, protocol e generics vengono usati per rappresentare stati, regole e confini. Qui lo studente inizia davvero a scrivere Swift, non solo sintassi Swift.
- 01 Scegliere tra struct, class, enum e protocol
- 02 Associated values e stati ricchi
- 03 Pattern matching come linguaggio del dominio
- 04 Generics per riuso senza perdere significato
- 05 Error modeling con throws, Result ed errori custom
- 06 Access control e confini del modulo
- 07 Extensions per organizzare comportamenti
- 08 Laboratorio: motore di regole coupon
Deliverablecostruire un motore di regole per coupon, prenotazioni, quiz o catalogo prodotti
Insegnare gusto, giudizio e leggibilità, non solo funzionamento.
Swift idiomatico
Si lavora su codice che già funziona ma comunica male. Il modulo mostra quando usare struct o class, quando un protocollo aiuta davvero e come progettare API che si leggono come intenzioni.
- 01 Giudizio Swift: scegliere la forma giusta
- 02 Protocol-oriented programming senza dogmi
- 03 Composizione vs ereditarietà
- 04 Map, compactMap, flatMap, filter e reduce
- 05 Equatable, Hashable, Comparable e Codable
- 06 API design: nomi, firme e leggibilità
- 07 Laboratorio: refactor Swift idiomatico
Deliverableuna pipeline dati refactorata da codice procedurale a Swift idiomatico
Capire cosa succede sotto al codice senza anticipare complessità inutile.
Memoria, performance e semantica
Stack, heap, ARC e copy-on-write diventano strumenti pratici per diagnosticare bug e ragionare sulle scelte. Il debugging visuale conta più della teoria astratta.
- 01 Stack, heap e semantica pratica
- 02 Copy-on-write senza magia
- 03 ARC: ownership automatica ma non invisibile
- 04 Retain cycle, weak e unowned
- 05 Closure capture e liste di cattura
- 06 Performance di collection e stringhe
- 07 Laboratorio: diagnosticare leak e copie inutili
Deliverablediagnosticare memory leak e migliorare una piccola libreria
Capire quando il codice asincrono diventa fragile e come tenerlo isolato.
Concorrenza moderna
Swift 6.x rende la concurrency una competenza centrale. Async/await è solo l'inizio: il corso lavora su isolamento, cancellazione, MainActor, Sendable e sugli errori ricorrenti dei progetti reali.
- 01 Async e await: sospendere senza bloccare
- 02 Task e structured concurrency
- 03 async let per parallelismo locale
- 04 TaskGroup per lavoro dinamico
- 05 Cancellation: progettare l'interruzione
- 06 Actors e isolamento dello stato
- 07 MainActor e aggiornamenti UI
- 08 Sendable e data-race safety
- 09 Errori comuni della concurrency Swift 6
- 10 Laboratorio: client API concorrente
Deliverableun client API con cache, cancellazione, retry e aggiornamento UI/main thread
Separare un tutorial da un corso serio: consegnare codice gestibile.
Tooling professionale
SwiftPM, test, debugging, formattazione, documentazione e CI vengono trattati come parte del mestiere, non come appendice. Lo studente impara a preparare codice per altri sviluppatori.
- 01 Swift Package Manager come base professionale
- 02 Struttura di un package Swift
- 03 Dipendenze, versioni e manifest
- 04 Testing con Swift Testing e XCTest
- 05 Debugging: errori, breakpoint e strumenti
- 06 Linting, formattazione e coerenza
- 07 DocC: documentare framework e package
- 08 CI di base per package Swift
- 09 Laboratorio: libreria Swift pubblicabile
Deliverablecreare una piccola libreria Swift pubblicabile e documentabile
Rendere il corso immediatamente spendibile su dati e API vere.
Persistenza, networking e Codable nel mondo reale
Il JSON dei tutorial è troppo pulito. Qui si lavora con date, snake_case, chiavi mancanti, errori HTTP, retry, timeout, cancellazione e cache leggera.
- 01 JSON realistico: quando i dati non collaborano
- 02 Codable avanzato: chiavi, date e valori mancanti
- 03 DTO e dominio: separare API e modello interno
- 04 URLSession e richiesta HTTP robusta
- 05 Errori HTTP, decoding e mapping degli errori
- 06 Retry, timeout e cancellazione nel networking
- 07 Caching leggero e persistenza locale
- 08 Laboratorio: SDK Swift per una API reale
Deliverableun SDK Swift per consumare una API reale
Rendere il codice modificabile senza paura.
Testabilità e architettura
Si separano dominio e infrastruttura, si introducono dipendenze semplici e si testano casi asincroni ed errori. L'architettura resta concreta, senza partire per forza da iOS.
- 01 Dependency injection semplice, senza framework
- 02 Separare dominio e infrastruttura
- 03 Mock, fake e stub: test double con intenzione
- 04 Testare codice asincrono in Swift 6
- 05 Testare errori, edge case e contratti
- 06 Snapshot concettuale dell'architettura
- 07 Refactor di un API service fragile
- 08 Laboratorio: client API service testabile
Deliverablerifattorizzare un client/API service rendendolo testabile
Mostrare dove vive Swift senza ridurlo a un solo framework.
Percorsi applicativi
A questo punto il corso si divide in tracce. Il nucleo resta Swift; le destinazioni cambiano: app native, server, CLI e librerie pubblicabili.
- 01 Swift oltre iOS: un nucleo, più destinazioni
- 02 Traccia iOS/macOS: SwiftUI, stato e lifecycle
- 03 UIKit e AppKit quando servono davvero
- 04 Traccia server: Vapor, routing, database e deploy
- 05 Traccia CLI: ArgumentParser, file system e automazioni
- 06 Traccia library authoring: API, versioning e DocC
- 07 Condividere il dominio tra app, server, CLI e librerie
- 08 Laboratorio: prototipo multi-traccia
Deliverablescegliere una traccia e costruire un prototipo minimo sullo stesso nucleo di dominio
Attraversare tutto il corso con un progetto non giocattolo.
Progetto finale
Il progetto finale mette insieme dominio, rete, cache, concurrency, error handling, test, moduli, documentazione e una piccola interfaccia o CLI. Il risultato deve sembrare codice da consegnare.
- 01 Scegliere il progetto finale e fissare i requisiti
- 02 Milestone 1: dominio, use case e confini
- 03 Milestone 2: networking, persistenza e cache
- 04 Milestone 3: concurrency, resilienza ed error handling
- 05 Milestone 4: test suite professionale
- 06 Milestone 5: package, moduli e documentazione
- 07 Milestone 6: interfaccia SwiftUI o CLI
- 08 Consegna finale: review, rubric e roadmap
Deliverableclient GitHub/Hacker News, app budget, motore prenotazioni, SDK meteo/finanza, task manager offline-first o mini backend + client
Destinazioni
Lo stesso nucleo Swift cambia runtime, non identità.
Native app
interfacce, stato, aggiornamenti sul MainActor e moduli condivisi
Server
route, servizi, validazione, test e deploy leggero
CLI
tool da terminale, file system, automazioni e distribuzione
Library
API pubbliche, versioning, documentazione e stabilità
Consegna finale
Ship finale: SDK Swift, test e demo.
Si costruisce un SDK Swift per una API reale: dominio separato, networking, cache, concurrency, error handling, test asincroni, documentazione DocC e una demo SwiftUI o CLI.