enum Direction {
case north
case south
case east
case west
}
let dir: Direction = .north
关联值(Associated Values)
enum Score {
case points(Int)
case grade(String)
}
let score: Score = .points(3)
原始值(Raw Values)
枚举成员可以使用相同类型的默认值预先对应,这个默认值叫做:原始值
原始值不占用枚举变量的内存
enum Grade: String {
case perfect = "A"
case great = "B"
case good = "C"
case bad = "D"
}
隐式原始值(Implicitly Assigned Raw Values)
如果枚举的原始值类型是Int,String,Swift会自动分配原始值
enum Direction: String {
case north = "north"
case south = "south"
case east = "east"
case west = "west"
}
/// 等价于
enum Direction {
case north
case south
case east
case west
}
递归枚举(Recursive Enumeration)
indirect enum ArithExpr {
case number(Int)
case sum(ArithExpr, ArithExpr)
}
enum ArithExpr {
case number(Int)
indirect case sum(ArithExpr, ArithExpr)
}
MemoryLayout
MemoryLayout可以获取到数据类型占用的内存大小
基础枚举内存大小为
- 系统分配1个字节
- 实际用到1个字节
- 按1个字节对接
enum TestEnum1 {
case test1
case test2
case test3
}
enum TestEnum2: Int {
case test1
case test2
case test3
}
var test = TestEnum1.test3
print(Mems.ptr(ofVal: &test))
print(Mems.size(ofVal: &test))
let stride = MemoryLayout<TestEnum1>.stride // 1
let size = MemoryLayout<TestEnum1>.size // 1
let alignment = MemoryLayout<TestEnum1>.alignment // 1