枚舉:
enum CompassPoint{
case north
case south
case east
case west
}
directionToHead = .south
switch directionToHead {
case .north:
print("Lots of planets have a north")
case .south:
print("Watch out for penguins")
case .east:
print("Where the sun rises")
case .west:
print("Where the skies are blue")
}
當不需要匹配每個枚舉成員的時候,你可以提供一個default分支來涵蓋所有未明確處理的枚舉成員
enum Planet: Int {
case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
}
enum CompassPoint: String {
case north, south, east, west
}
遞歸枚舉:
它有一個或多個枚舉成員使用該枚舉類型的實例作為關聯值。使用遞歸枚舉時,編譯器會插入一個間接層,你可以在枚舉成員前加上indirect 來表示該成員可遞歸
enum Arth {
case Number(Int)
indirect case Add(Arth,Arth)
indirect case Mul(Arth,Arth)
}
let five = Arth.Number(5)
let four = Arth.Number(4)
let sum = Arth.Add(five, four)
let result = Arth.Mul(sum, Arth.Number(2))
print(result)
print(evaluate(express: result))
func evaluate(express:Arth) -> Int {
switch express {
case .Number(let value):
return value
case .Add(let left, let right):
return evaluate(express: left) + evaluate(express: right)
case .Mul(let left, let right):
return evaluate(express: left) * evaluate(express: right)
}
}