- 枚举值没有默认值,默认为枚举类型。
- switch中必须列出所有可能,不然必须用default
- 设置有默认值的枚举,必须在枚举类型后声明类型。取值的时候直接.rawValue(原始值)即可。
- 关联值只能保存一个,因为枚举只能选其一。
- 如果枚举的关联值使用到了自己,则需要添加indirect
1.多个成员值可以在同一行上,用,分开
enum direction {
case east,west
case north
case sourth
}
2.当变量的类型已知为枚举型时,可以用 .east赋值。(如tab.separatorStyle = .singleLine)
3.关联值。
enum direction {
case east,west(Int,Int)
case north(String)
}
//如果后面要改变内部枚举类型的值,这里必须为var。只能拥有一个关联值,相当于枚举时的枚举值切换。
var x = direction.west(1, 2)
x = .north("zc")
switch x {
case let .west(a, b):
print(a+b)
case let .north(c):
print(c)
default:
print("default")
}
4.设置原始值,需要在枚举后面加上类型,字符串默认就是枚举的名字,Int默认为0 依次+1.(枚举值的类型必须为字符,整型,浮点型,不可为元祖)
取值时使用rawValue
enum direction:Int {
case east = 1
case north = 2
case sourth = 3
}
let x = direction.west.rawValue
if let x = direction(rawValue: 2){
switch x {
case .east:
print("一路向东")
default:
print("不走了")
}
}else{
print("没有改值")
}
5.递归枚举,就是在枚举中仍然使用该枚举类型。
enum ArithmeticExpression {
case number(Int)
indirect case addition(ArithmeticExpression, ArithmeticExpression)
indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}
func evalute (_ expression: ArithmeticExpression) -> Int {
switch expression {
case let .number(a):
return a
case let .addition(a, b):
return evalute(_:a)+evalute(_:b)
case let .multiplication(a, b):
return evalute(_:a)*evalute(_:b)
}
}