Associated Values in Swift: cosa sono, sintassi ed esempi

Autore: IT Sectr Pubblicato: 2026-06-17 Tempo di lettura: 6 min

Associated Values — un meccanismo di Swift che consente di associare dati arbitrari a ogni caso di enum individualmente. A differenza dei raw values, dove tutti i casi hanno valori dello stesso tipo, gli associated values possono differire per tipo e quantità per ogni caso. Secondo Apple Documentation, 2026, questa è una capacità chiave per modellare con precisione un dominio senza creare tipi wrapper aggiuntivi.

Punti Chiave

  • Associated Values — dati individuali associati a un caso di enum
  • Tipi degli associated values possono differire per ogni caso
  • Estrazione avviene tramite binding di valori in switch o if case
  • Mutua Esclusione — gli associated values sono incompatibili con i raw values
  • Pratica — modellazione di errori, risultati di query e stati UI

Cosa sono gli Associated Values?

Associated Values sono informazioni aggiuntive che un caso di enum può memorizzare con sé. A differenza dei raw values, che sono fissi a livello di dichiarazione, gli associated values vengono impostati quando si crea un'istanza di enum.

Immagina di modellare un metodo di pagamento: il caso creditCard può memorizzare le ultime 4 cifre e la data di scadenza, mentre il caso applePay non memorizza nulla. Con gli associated values, questo viene implementato naturalmente, senza sottoclassi o campi opzionali.

Secondo la documentazione Apple, gli associated values trasformano un enum da un semplice insieme di costanti in un tipo di dato algebrico (sum type), caratteristico dei linguaggi funzionali. Ciò aumenta significativamente l'espressività del codice.

Sintassi degli associated values

Gli Associated Values vengono dichiarati tra parentesi dopo il caso, specificando nomi e tipi dei parametri, come nelle funzioni.

swift
enum MediaFile {
    case image(width: Int, height: Int, format: String)
    case video(duration: Double, codec: String)
    case audio(bitrate: Int)
    case unknown
}

Quando si crea un'istanza, gli associated values vengono passati come argomenti:

swift
let photo = MediaFile.image(width: 1920, height: 1080, format: "jpeg")
let clip = MediaFile.video(duration: 120.5, codec: "h264")

Swift non impone restrizioni sul numero o sui tipi di associated values. Puoi usare generics, funzioni di chiusura e altri enum all'interno degli associated values. Ciò consente di costruire strutture nidificate complesse.

I nomi dei parametri degli associated values vengono usati come etichette degli argomenti quando si crea un'istanza — questo migliora la leggibilità del codice. Durante l'estrazione tramite switch, i nomi servono come documentazione, chiarendo il significato di ogni valore. Questo approccio rende il codice auto-documentante e riduce la probabilità di errori durante il matching dei dati. Ciò è particolarmente prezioso nello sviluppo di team di grandi applicazioni iOS.

Switch con associated values

Switch è il modo principale per estrarre gli associated values. I valori vengono legati a costanti o variabili tramite let o var.

swift
func describe(_ file: MediaFile) -> String {
    switch file {
    case .image(let w, let h, let fmt):
        return "Image \(w)x\(h) .\(fmt)"
    case .video(let duration, let codec):
        return "Video \(duration)s, \(codec)"
    case .audio(let bitrate):
        return "Audio \(bitrate)kbps"
    case .unknown:
        return "Unknown format"
    }
}

Swift supporta il matching parziale — puoi specificare valori concreti per gli associated values:

swift
switch file {
case .image(let w, let h, "png"):
    print("Immagine PNG \(w)x\(h)")
case .image(1920, 1080, _):
    print("Immagine Full HD")
default:
    break
}

Usare un wildcard (_) consente di ignorare associated values non necessari, e le costanti nei casi permettono di verificare corrispondenze con valori specifici.

Associated Values vs Raw Values

Molti sviluppatori principianti confondono gli associated values con i raw values. Sono meccanismi diversi con casi d'uso diversi.

CaratteristicaRaw ValuesAssociated Values
Tipo di DatoUn tipo per tutti i casiTipi diversi per ogni caso
Momento di AssegnazioneAlla dichiarazione dell'enumAlla creazione dell'istanza
ObbligatorietàTutti i casi hanno un valoreAlcuni casi possono essere senza valori
CompatibilitàMutualmente esclusivi — non possono essere usati simultaneamente

Secondo Swift Evolution, gli associated values sono stati introdotti in Swift 2.0 come parte del redesign degli enum. Forniscono un approccio algebrico ai tipi, dove ogni caso è un costruttore separato con la propria firma.

Esempi pratici di associated values

Gli Associated Values sono attivamente utilizzati in progetti iOS reali. Consideriamo tre scenari tipici.

Modellazione di risposte API

swift
enum APIResponse<T: Codable> {
    case success(data: T, cached: Bool)
    case failure(error: Error, retryAvailable: Bool)
    case loading(progress: Double)
}

Macchina a Stati UI

swift
enum ViewState<T> {
    case idle
    case loading(message: String)
    case loaded(data: T)
    case error(message: String, retryAction: () -> Void)
}

Con gli associated values, l'enum diventa un potente strumento per le macchine a stati: ogni caso è uno stato, gli associated values sono i parametri di quello stato. Il compilatore garantisce che tutte le transizioni siano gestite.

Estrazione tramite if case e guard case

Per verificare un singolo caso senza switch, usa if case o guard case. È più compatto quando devi gestire una sola opzione.

swift
let error = NetworkError.timeout(seconds: 30)

if case .timeout(let seconds) = error {
    print("Richiesta scaduta dopo \(seconds)s")
}

guard case .httpError(let code, _) = error else {
    return
}
print("Errore HTTP con codice \(code)")

Domande Frequenti

Un enum può avere associated values senza parametri?

, un caso può non avere associated values — ad esempio, case unknown. Questi casi si comportano come normali casi di enum senza dati aggiuntivi. È comodo per stati marker.

Come confrontare due enum con associated values?

Swift non genera automaticamente Equatable per enum con associated values (prima di Swift 4.2+). Aggiungi un'implementazione esplicita di Equatable o usa switch per confrontare ogni caso sequenzialmente.

Si possono usare associated values in enum ricorsivi?

, gli associated values negli indirect enum sono una tecnica standard per costruire alberi e liste concatenate. Un caso può contenere un associated value dello stesso tipo marcato con indirect.

In cosa differiscono gli associated values dalle proprietà opzionali in una struct?

Associated Values sono type-safe — ogni caso garantisce di avere solo i propri dati. In una struct con opzionali, ogni istanza contiene tutti i campi e sono necessari controlli nil a runtime.

Gli associated values supportano Codable?

Swift non genera automaticamente Codable per enum con associated values. È necessaria un'implementazione manuale di encode e decode tramite switch sui casi usando chiavi di codifica personalizzate.

Riepilogo

  • Associated Values — un meccanismo per associare dati diversi a ogni caso di enum
  • Sintassi — dichiarazione di parametri tra parentesi dopo il caso, come funzioni
  • Estrazione tramite switch con binding let o if case
  • Incompatibile con raw values — usane solo uno
  • Generics negli associated values rendono l'enum un contenitore universale
  • Macchina a Stati — uno scenario tipico per gli associated values in iOS

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche