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 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.
Associated Values werden in Klammern nach dem Fall deklariert, wobei Parameternamen und -typen wie bei Funktionen angegeben werden.
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:
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 ist die primäre Methode zur Extraktion von Associated Values. Werte werden über let oder var an Konstanten oder Variablen gebunden.
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:
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.
Viele Anfänger verwechseln Associated Values mit Raw Values. Dies sind unterschiedliche Mechanismen mit unterschiedlichen Anwendungsfällen.
| Merkmal | Raw Values | Associated Values |
|---|---|---|
| Datentyp | Ein Typ für alle Fälle | Verschiedene Typen für jeden Fall |
| Zuweisungszeitpunkt | Bei Enum-Deklaration | Bei Instanzerstellung |
| Verpflichtend | Alle Fälle haben einen Wert | Einige Fälle können ohne Werte sein |
| Kompatibilität | Gegenseitig 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.
Associated Values werden aktiv in realen iOS-Projekten eingesetzt. Betrachten wir drei typische Szenarien.
enum APIResponse<T: Codable> {
case success(data: T, cached: Bool)
case failure(error: Error, retryAvailable: Bool)
case loading(progress: Double)
}
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.
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.
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
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.
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.
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.
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.
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
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.
Lesen Sie auch