Enum-Typen

von @ralfebert · aktualisiert am 4. November 2021
Xcode 13 & Swift 5.5
Swift Kurzreferenz

Mit dem enum-Schlüsselwort können Aufzählungstypen definiert werden:

enum Direction {
    case north
    case south
    case east
    case west
}

Die Verwendung der Enum-Werte erfolgt explizit oder abgekürzt (soweit der Compiler den Typ ermitteln kann):

var direction = Direction.north
direction = .south

Die Unterscheidung eines Enum-Wertes erfolgt via switch:

switch(direction) {
case .north:
    print("N")
case .south:
    print("S")
default:
    print("other")
}

Raw Types

Für ein enum kann einen Raw Type definiert werden, der das Enum intern repräsentiert:

enum Direction : Int {
    case north
    case south
    case east
    case west
}

Direction.west.rawValue // 3
Direction(rawValue: 3)  // .west

Enums mit assoziierten Werten

Per Associated Value können an einen case eines enum-Typs Werte angehangen werden:

enum State {
    case waiting
    case running(progress: Float)
    case finished
}

func handle(state: State) {
    // ...
}

handle(state: .waiting)
handle(state: .running(progress: 0.5))
handle(state: .finished)

Mit einem case let innerhalb eines switch-Blocks kann auf diese Werte zugegriffen werden:

func handle(state: State) {
    switch(state) {
    case .waiting:
        print("Waiting")
    case let .running(progress):
        print("Making progress: \(progress * 100)%")
    case .finished:
        print("Finished!")
    }

}

Sehr besonders ist die if case let-Syntax, mit der innerhalb eines if-Statements auf einen bestimmten case geprüft und auf die assoziierten Werte zugegriffen werden kann:

if case let .running(progress) = state {
    print("Making progress: \(progress * 100)%")
}

Weitere Informationen