Enum-Typen
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)%")
}