Associated Values in Swift: wat is het, syntax en voorbeelden

Auteur: IT Sectr Gepubliceerd: 2026-06-17 Leestijd: 6 min

Associated Values — een Swift-mechanisme waarmee willekeurige gegevens aan elke enum-variant afzonderlijk kunnen worden gekoppeld. In tegenstelling tot raw values, waarbij alle cases waarden van hetzelfde type hebben, kunnen associated values per case verschillen in type en hoeveelheid. Volgens Apple Documentation, 2026 is dit een belangrijke mogelijkheid voor het nauwkeurig modelleren van het domein zonder extra wrapper-typen te creëren.

Belangrijkste punten

  • Associated Values — individuele gegevens gekoppeld aan een enum case
  • Typen associated values kunnen per case verschillen
  • Extractie gebeurt via het binden van waarden in switch of if case
  • Onderlinge uitsluiting — associated values zijn onverenigbaar met raw values
  • Praktijk — modelleren van fouten, queryresultaten en UI-statussen

Wat zijn Associated Values?

Associated Values — zijn extra informatie die een enum case samen met zichzelf kan opslaan. In tegenstelling tot raw values, die op declaratieniveau zijn vastgelegd, worden associated values bepaald bij het maken van een enum-instantie.

Stel je het modelleren van een betaalmethode voor: case creditCard kan de laatste 4 cijfers en de vervaldatum opslaan, en case applePay — niets. Met associated values wordt dit op een natuurlijke manier geïmplementeerd, zonder subklassen of optionele velden.

Volgens de Apple-documentatie transformeren associated values enum van een eenvoudige set constanten naar een algebraïsch gegevenstype (sum type), kenmerkend voor functionele talen. Dit verhoogt de expressiviteit van de code aanzienlijk.

Syntax van associated values

Associated values worden gedeclareerd tussen ronde haakjes na de case, met vermelding van parameternamen en -typen, zoals bij functies.

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

Bij het maken van een instantie worden associated values doorgegeven als argumenten:

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

Swift legt geen beperkingen op aan het aantal of de typen associated values. Je kunt generics, closure-functies en andere enum gebruiken binnen associated values. Dit maakt het mogelijk om complexe geneste structuren te bouwen.

De parameternamen van associated values worden gebruikt als argumentlabels bij het maken van een instantie — dit verbetert de leesbaarheid van de code. Bij extractie via switch dienen de namen als documentatie en verduidelijken ze de betekenis van elke waarde. Een dergelijke aanpak maakt code zelfdocumenterend en vermindert de kans op fouten bij het matchen van gegevens. Dit is vooral waardevol bij teamontwikkeling van grote iOS-applicaties.

Switch met associated values

Switch — de belangrijkste manier om associated values te extraheren. Waarden worden gebonden aan constanten of variabelen via let of 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 ondersteunt gedeeltelijke matching — specifieke waarden van associated values kunnen worden opgegeven:

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

Het gebruik van wildcard (_) maakt het mogelijk om onnodige associated values te negeren, en constanten in cases — om overeenkomst met specifieke waarden te controleren.

Associated Values vs Raw Values

Veel beginnende ontwikkelaars verwarren associated values met raw values. Dit zijn verschillende mechanismen met verschillende toepassingsscenario's.

KenmerkRaw ValuesAssociated Values
GegevenstypeEén type voor alle casesVerschillende typen voor elke case
Moment van bepalingBij declaratie van enumBij maken van instantie
VerplichtingAlle cases hebben een waardeSommige cases kunnen zonder waarde zijn
CompatibiliteitOnderling uitsluitend — kunnen niet tegelijk worden gebruikt

Volgens Swift Evolution zijn associated values geïntroduceerd in Swift 2.0 als onderdeel van het herontwerp van enum. Ze bieden een algebraïsche benadering van typen, waarbij elke case een aparte constructor is met een eigen handtekening.

Praktische voorbeelden van associated values

Associated values worden actief gebruikt in echte iOS-projecten. Laten we drie typische scenario's bekijken.

Modelleren van API-antwoorden

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

UI State Machine

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

Met associated values wordt enum een krachtig hulpmiddel voor eindige automaten: elke case is een toestand, associated values — de parameters van die toestand. De compiler garandeert dat alle overgangen worden afgehandeld.

Extractie via if case en guard case

Gebruik voor het controleren van één case zonder switch if case of guard case. Dit is compacter wanneer slechts één variant moet worden verwerkt.

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

if case .timeout(let seconds) = error {
    print("Verzoek verlopen na \(seconds)s")
}

guard case .httpError(let code, _) = error else {
    return
}
print("HTTP-fout met code \(code)")

Veelgestelde vragen

Kan een enum associated values hebben zonder parameters?

Ja, een case kan geen associated values hebben — bijvoorbeeld case unknown. Dergelijke cases gedragen zich als gewone enum-cases zonder extra gegevens. Dit is handig voor markeringsstatussen.

Hoe vergelijk je twee enums met associated values?

Swift genereert niet automatisch Equatable voor enums met associated values (tot Swift 4.2+). Voeg een expliciete implementatie van Equatable toe of gebruik switch om elke case afzonderlijk te vergelijken.

Kunnen associated values worden gebruikt in recursieve enums?

Ja, associated values in indirect enum — een standaardtechniek voor het bouwen van bomen en gelinkte lijsten. Een case kan een associated value van hetzelfde type bevatten met de markering indirect.

Wat is het verschil tussen associated values en optionele eigenschappen in struct?

Associated values zijn typeveilig — elke case heeft gegarandeerd alleen zijn eigen gegevens. In een struct met optionals bevat elke instantie alle velden en zijn runtime-controles op nil nodig.

Ondersteunen associated values Codable?

Swift genereert niet automatisch Codable voor enums met associated values. Handmatige implementatie van encode en decode via switch over cases met custom coding keys is vereist.

Samenvatting

  • Associated Values — mechanisme voor het koppelen van verschillende gegevens aan elke enum case
  • Syntax — declaratie van parameters tussen haakjes na case, zoals bij functies
  • Extractie via switch met let-binding of if case
  • Onverenigbaar met raw values — gebruik een van beide
  • Generics in associated values maken enum tot een universele container
  • State Machine — typisch scenario voor associated values in iOS

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook