Associated Values in Swift: Was es ist, Syntax und Beispiele

Autor: IT Sectr Veröffentlicht: 2026-06-17 Lesezeit: 6 Min.

Associated Values — ein Swift-Mechanismus, der es ermöglicht, jedem Enum-Fall individuell beliebige Daten anzuhängen. Im Gegensatz zu Raw Values, bei denen alle Fälle Werte desselben Typs haben, können Associated Values für jeden Fall in Typ und Anzahl variieren. Laut Apple Documentation, 2026 ist dies eine Schlüsselfunktion zur präzisen Modellierung einer Domäne ohne zusätzliche Wrappertypen.

Wichtige Punkte

  • Associated Values — individuelle Daten, die an einen Enum-Fall gebunden sind
  • Typen von Associated Values können für jeden Fall unterschiedlich sein
  • Extraktion erfolgt durch Wertbindung in switch oder if case
  • Gegenseitiger Ausschluss — Associated Values sind inkompatibel mit Raw Values
  • Praxis — Modellierung von Fehlern, Abfrageergebnissen und UI-Zuständen

Was sind Associated Values?

Associated Values sind zusätzliche Informationen, die ein Enum-Fall zusammen mit sich selbst speichern kann. Anders als Raw Values, die auf Deklarationsebene festgelegt sind, werden Associated Values beim Erstellen einer Enum-Instanz festgelegt.

Stellen Sie sich die Modellierung einer Zahlungsmethode vor: Der Fall creditCard kann die letzten 4 Ziffern und das Ablaufdatum speichern, während der Fall applePay nichts speichert. Mit Associated Values wird dies ohne Unterklassen oder optionale Felder natürlich implementiert.

Laut Apple-Dokumentation verwandeln Associated Values ein Enum von einer einfachen Sammlung von Konstanten in einen algebraischen Datentyp (Summentyp), der für funktionale Sprachen charakteristisch ist. Dies erhöht die Ausdruckskraft des Codes erheblich.

Syntax der Associated Values

Associated Values werden in Klammern nach dem Fall deklariert, wobei Parameternamen und -typen wie bei Funktionen angegeben werden.

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

Beim Erstellen einer Instanz werden die Associated Values als Argumente übergeben:

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

Swift legt keine Einschränkungen hinsichtlich der Anzahl oder Typen von Associated Values fest. Sie können Generics, Closures und andere Enums innerhalb von Associated Values verwenden. Dies ermöglicht den Aufbau komplexer verschachtelter Strukturen.

Die Parameternamen von Associated Values werden als Argumentbezeichner beim Erstellen einer Instanz verwendet — dies verbessert die Lesbarkeit des Codes. Bei der Extraktion über switch dienen die Namen als Dokumentation und verdeutlichen die Bedeutung jedes Werts. Dieser Ansatz macht den Code selbstdokumentierend und reduziert die Wahrscheinlichkeit von Fehlern beim Datenabgleich. Dies ist besonders wertvoll in der Teamentwicklung großer iOS-Anwendungen.

Switch mit Associated Values

Switch ist die primäre Methode zur Extraktion von Associated Values. Werte werden über let oder var an Konstanten oder Variablen gebunden.

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 unterstützt partiellen Abgleich — Sie können konkrete Werte für Associated Values angeben:

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

Die Verwendung eines Platzhalters (_) ermöglicht das Ignorieren unnötiger Associated Values, und Konstanten in Fällen erlauben die Überprüfung auf Übereinstimmung mit bestimmten Werten.

Associated Values vs Raw Values

Viele Anfänger verwechseln Associated Values mit Raw Values. Dies sind unterschiedliche Mechanismen mit unterschiedlichen Anwendungsfällen.

MerkmalRaw ValuesAssociated Values
DatentypEin Typ für alle FälleVerschiedene Typen für jeden Fall
ZuweisungszeitpunktBei Enum-DeklarationBei Instanzerstellung
VerpflichtendAlle Fälle haben einen WertEinige Fälle können ohne Werte sein
KompatibilitätGegenseitig ausschließend — können nicht gleichzeitig verwendet werden

Laut Swift Evolution wurden Associated Values in Swift 2.0 als Teil des Enum-Redesigns eingeführt. Sie bieten einen algebraischen Ansatz für Typen, bei dem jeder Fall ein separater Konstruktor mit eigener Signatur ist.

Praktische Beispiele für Associated Values

Associated Values werden aktiv in realen iOS-Projekten eingesetzt. Betrachten wir drei typische Szenarien.

Modellierung von API-Antworten

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

UI-Zustandsmaschine

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

Mit Associated Values wird Enum zu einem leistungsstarken Werkzeug für Zustandsmaschinen: Jeder Fall ist ein Zustand, Associated Values sind Parameter dieses Zustands. Der Compiler garantiert, dass alle Übergänge behandelt werden.

Extraktion über if case und guard case

Um einen einzelnen Fall ohne switch zu überprüfen, verwenden Sie if case oder guard case. Dies ist kompakter, wenn Sie nur eine Option behandeln müssen.

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

if case .timeout(let seconds) = error {
    print("Anfrage nach \(seconds)s abgelaufen")
}

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

Häufig gestellte Fragen

Kann ein Enum Associated Values ohne Parameter haben?

Ja, ein Fall kann keine Associated Values haben — zum Beispiel case unknown. Solche Fälle verhalten sich wie normale Enum-Fälle ohne zusätzliche Daten. Dies ist praktisch für Markierungszustände.

Wie vergleicht man zwei Enums mit Associated Values?

Swift generiert nicht automatisch Equatable für Enums mit Associated Values (vor Swift 4.2+). Fügen Sie eine explizite Equatable-Implementierung hinzu oder verwenden Sie switch, um jeden Fall sequenziell zu vergleichen.

Können Associated Values in rekursiven Enums verwendet werden?

Ja, Associated Values in indirect Enums sind eine Standardtechnik zum Erstellen von Bäumen und verketteten Listen. Ein Fall kann einen Associated Value desselben Typs enthalten, der mit indirect markiert ist.

Wie unterscheiden sich Associated Values von optionalen Eigenschaften in einem Struct?

Associated Values sind typsicher — jeder Fall garantiert, nur seine eigenen Daten zu haben. In einem Struct mit Optionalen enthält jede Instanz alle Felder, und Laufzeit-Nil-Prüfungen sind erforderlich.

Unterstützen Associated Values Codable?

Swift generiert nicht automatisch Codable für Enums mit Associated Values. Eine manuelle Implementierung von encode und decode über switch auf Fälle mit benutzerdefinierten Codierungsschlüsseln ist erforderlich.

Zusammenfassung

  • Associated Values — ein Mechanismus zum Anhängen verschiedener Daten an jeden Enum-Fall
  • Syntax — Deklaration von Parametern in Klammern nach dem Fall, wie bei Funktionen
  • Extraktion über switch mit let-Bindung oder if case
  • Inkompatibel mit Raw Values — verwenden Sie nur eines
  • Generics in Associated Values machen Enum zu einem universellen Container
  • Zustandsmaschine — ein typisches Szenario für Associated Values in iOS

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch