Enums and Pattern Matching
Enum Cases
Enums name a small set of possible states.
Choose from named cases
enum_cases.swift
Replay: real traced execution (multi-file project)
enum Direction {
case north
case south
case east
case west
}
let input = "east"
var direction = Direction.east
switch input {
case "north":
direction = Direction.north
case "south":
direction = Direction.south
case "west":
direction = Direction.west
default:
direction = Direction.east
}
print("input=\(input)")
print("direction=\(direction)")
enum Direction {
case north
case south
case east
case west
}
let input = "north"
var direction = Direction.east
switch input {
case "north":
direction = Direction.north
case "south":
direction = Direction.south
case "west":
direction = Direction.west
default:
direction = Direction.east
}
print("input=\(input)")
print("direction=\(direction)")
enum Direction {
case north
case south
case east
case west
}
let input = "west"
var direction = Direction.east
switch input {
case "north":
direction = Direction.north
case "south":
direction = Direction.south
case "west":
direction = Direction.west
default:
direction = Direction.east
}
print("input=\(input)")
print("direction=\(direction)")
input ← east, direction ← east
8let input→ east = "east" //@input="north", "west"9var direction→ east = Direction.eastswitch input
11switch inputeast {12case "north":13 direction = Direction.northdirection ← east
17 direction = Direction.west18default:19 direction→ east = Direction.east20}print("input=\(input)")
22print("input=\(inputeast)")23print("direction=\(directioneast)")outputinput=east direction=east
input ← north, direction ← east
8let input→ north = "north"9var direction→ east = Direction.eastswitch input
11switch inputnorth {12case "north":13 direction = Direction.northdirection ← north
11switch input {12case "north":13 direction→ north = Direction.north14case "south":print("input=\(input)")
22print("input=\(inputnorth)")23print("direction=\(directionnorth)")outputinput=north direction=north
input ← west, direction ← east
8let input→ west = "west"9var direction→ east = Direction.eastswitch input
11switch inputwest {12case "north":13 direction = Direction.northdirection ← west
15 direction = Direction.south16case "west":17 direction→ west = Direction.west18default:print("input=\(input)")
22print("input=\(inputwest)")23print("direction=\(directionwest)")outputinput=west direction=west
enum
An enum case is a typed value. A switch can convert outside input into one of the known cases.