Enum in Swift — was es ist, Syntax und Verwendung

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

Enum in Swift ist ein Typ, der eine Gruppe zusammengehöriger Werte unter einem Namen vereint. Im Gegensatz zu C und Objective-C, wo enum nur eine Sammlung von Integer-Konstanten ist, bietet Swift First-Class-Aufzählungen mit associated values, raw values, Methoden und Protokollunterstützung. Laut Apple, 2026 ist enum eines der wichtigsten Werkzeuge für typsicheres Zustandsmodellieren in der iOS-Entwicklung.

Wichtige Punkte

  • Enum — ein Typ für eine Gruppe zusammengehöriger Werte, der Typsicherheit gewährleistet
  • Raw Values — gleichartige Werte, die allen Aufzählungsfällen zugewiesen werden
  • Associated Values — verschiedene Datentypen, die jedem Fall individuell zugeordnet werden
  • Fälle werden mit dem Schlüsselwort case deklariert und können Methoden enthalten
  • Switch mit enum erfordert eine erschöpfende Prüfung durch den Compiler

Was ist enum in Swift?

Enum (Aufzählung) ist ein benutzerdefinierter Datentyp, der eine endliche Menge sich gegenseitig ausschließender Varianten vereint. In Swift ist enum nicht nur ein numerischer Konstantensatz, sondern ein vollwertiger Typ mit eigener Logik.

Jede Variante einer Aufzählung wird als Fall bezeichnet. Anders als in Objective-C, wo enum auf einen Integer-Typ reduziert wird, erlaubt Swift jedem Fall, eigene Daten zu speichern und Methoden zu haben.

Laut Apple unterstützt enum in Swift Generics, Initialisierer, berechnete Eigenschaften und Protokollkonformität — was es für die Modellierung von Zuständen, Fehlern, Optionen und endlichen Zustandsmaschinen anwendbar macht.

Verwenden Sie enum überall dort, wo Sie eine endliche Menge sich gegenseitig ausschließender Varianten darstellen müssen: Bildschirmzustände, Fehlertypen, Richtungen, Filteroptionen.

Syntax der Enum-Deklaration

Enum wird mit dem Schlüsselwort enum gefolgt von einem Namen und einem Körper in geschweiften Klammern deklariert.

swift
enum CompassDirection {
    case north
    case south
    case east
    case west
}

Fälle können in einer einzigen Zeile, durch Komma getrennt, deklariert werden:

swift
enum Planet {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

Um auf einen Fall zuzugreifen, verwenden Sie die Punkt-Syntax nach dem bekannten Typ:

swift
let direction = CompassDirection.north
// Typ bekannt — Kurzschreibweise verfügbar:
var currentPlanet = .earth

Sobald einer Variable ein bekannter enum-Typ zugewiesen wurde, leitet Swift den Typ automatisch ab, sodass der Aufzählungsname beim Zugriff auf Fälle weggelassen werden kann.

Raw Values in Aufzählungen

Raw Values sind Werte eines einzigen Typs, die jedem enum-Fall zugewiesen werden. Im Gegensatz zu associated values sind raw values für alle Fälle vom gleichen Typ und werden bei der Deklaration festgelegt.

swift
enum HTTPStatusCode: Int {
    case ok = 200
    case notFound = 404
    case internalServerError = 500
}

let code = HTTPStatusCode.notFound
print(code.rawValue) // 404

Bei ganzzahligen raw values inkrementiert Swift die Werte automatisch, wenn nur der erste explizit gesetzt wurde:

swift
enum Status: Int {
    case pending = 1
    case active      // 2
    case completed   // 3
}

Raw values können von den Typen Int, String, Character oder jedem Typ sein, der dem Protokoll RawRepresentable entspricht. Swift generiert automatisch den Initialisierer init?, um einen enum aus einem raw value zu erstellen — praktisch zum Parsen von Daten aus APIs.

Associated Values in enum

Associated Values ermöglichen es, jedem enum-Fall individuell unterschiedliche Datentypen zuzuordnen. Anders als raw values können sich associated values in Typ und Anzahl unterscheiden.

swift
enum NetworkError {
    case timeout(seconds: Int)
    case httpError(code: Int, message: String)
    case noConnection
    case unknown(error: Error)
}

Bei der Verarbeitung mit switch werden associated values durch Bindung an Variablen oder Konstanten extrahiert:

swift
let error = NetworkError.httpError(code: 403, message: "Forbidden")

switch error {
case .timeout(let seconds):
    print("Zeitüberschreitung nach \(seconds)s")
case .httpError(let code, let message):
    print("HTTP \(code): \(message)")
case .noConnection:
    print("Keine Verbindung")
case .unknown(let err):
    print("Unbekannt: \(err.localizedDescription)")
}

Laut Apple-Dokumentation machen associated values enum zu einem ausdrucksstarken Werkzeug für die Modellierung komplexer Zustände, ohne separate Wrapper-Typen erstellen zu müssen. Verwenden Sie sie für Result-ähnliche Szenarien und die Modellierung von Fehlern mit Kontext.

Rekursive Enum (indirect)

Rekursive Enum — eine Aufzählung, deren Fälle auf den enum-Typ selbst verweisen. Solche Fälle werden mit dem Schlüsselwort indirect markiert.

swift
indirect enum LinkedList<T> {
    case empty
    case node(value: T, next: LinkedList<T>)
}

Die Verwendung von indirect vor enum markiert alle Fälle als rekursiv. Alternativ kann nur ein bestimmter Fall mit indirect markiert werden:

swift
enum ArithmeticExpression {
    case number(Int)
    indirect case addition(ArithmeticExpression, ArithmeticExpression)
    indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}

Swift verwendet indirect, um rekursive Fälle als Referenzen (Referenzsemantik) statt als Werte zu speichern — dies verhindert eine unendliche Größe des enum auf dem Stack. Rekursive enums werden häufig beim Erstellen von Bäumen, verketteten Listen und ASTs verwendet.

Enum und Protokolle

Enum kann genau wie Strukturen und Klassen Protokollen entsprechen. Dies ist eine Schlüsselfunktion der protokollorientierten Programmierung in Swift.

swift
protocol Describable {
    var description: String { get }
}

enum PaymentMethod: Describable {
    case creditCard(last4: String)
    case applePay
    case bankTransfer

    var description: String {
        switch self {
        case .creditCard(let last4):
            return "Card ending in \(last4)"
        case .applePay:
            return "Apple Pay"
        case .bankTransfer:
            return "Bank Transfer"
        }
    }
}

Enum kann auch Cocoa-Protokollen entsprechen — zum Beispiel CaseIterable zur automatischen Generierung einer Sammlung aller Fälle oder Codable zur Serialisierung. Dies macht enum zu einem vielseitigen Baustein in Swift-Anwendungen.

Häufig gestellte Fragen

Wie unterscheidet sich enum von struct in Swift?

Enum ist ein Typ mit einer endlichen Menge sich gegenseitig ausschließender Varianten, während struct ein Typ mit einer beliebigen Menge von Eigenschaften ist. Enum kann keine stored properties haben, unterstützt aber computed properties und Methoden.

Kann ein enum gleichzeitig raw values und associated values haben?

Nein, ein enum kann nicht gleichzeitig raw values und associated values haben. Raw values sind Werte desselben Typs für alle Fälle, während associated values individuelle Daten für jeden Fall sind. Diese Mechanismen schließen sich gegenseitig aus.

Wie erhalte ich ein Array aller enum-Fälle?

Fügen Sie die Konformität zum CaseIterable-Protokoll hinzu. Swift generiert automatisch die allCases-Eigenschaft, die eine Sammlung aller Fälle in der Deklarationsreihenfolge zurückgibt. Dies ist praktisch zum Iterieren über alle Varianten.

Ist die Verwendung von switch zur Verarbeitung von enum zwingend erforderlich?

Switch ist der sicherste Ansatz, da der Compiler die erschöpfende Abdeckung prüft. Sie können if case zur Überprüfung eines einzelnen Falls oder == für enum ohne associated values verwenden.

Kann ich einen enum mit Generics erstellen?

Ja, enum unterstützt Generics: enum Result<T, E> { case success(T); case failure(E) }. Dies ermöglicht die Erstellung typsicherer generischer Konstrukte zur Behandlung von Erfolg und Fehler.

Zusammenfassung

  • Enum in Swift ist ein vollwertiger Typ mit Unterstützung für Methoden, Generics und Protokolle
  • Raw Values ermöglichen die Festlegung gleichartiger Werte für alle Fälle
  • Associated Values ermöglichen die Bindung unterschiedlicher Daten an jeden Fall
  • Indirect-Fälle sind für rekursive Strukturen in enum erforderlich
  • Protokolle können von enum implementiert werden — dies ist die Grundlage von POP in Swift
  • Switch mit enum garantiert eine erschöpfende Behandlung zur Compile-Zeit
  • Verwenden Sie enum zur Modellierung endlicher Zustände und typsicherer Optionen

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