Swift 枚举(enum)

278 阅读1分钟

1、定义一个枚举

// 原始值
enum Season {
    case spring, summer, autumn, winter
}

// 关联值
enum Password {
    case number(Int, Int, Int, Int)
    case gesture(String)
}

2、枚举使用

// 原始值
let season = Season.spring
switch season {
case .spring:
    print("春天")
case .summer:
    print("夏天")
case .autumn:
    print("秋天")
case .winter:
    print("冬天")
}

// 关联值
let pw: Password = .number(1, 2, 3, 4)
switch pw {
case let .number(a, b, c, d):
    print("数字密码:'\(a)'_'\(b)''\(c)''\(d)'")
case let .gesture(str):
    print("手势密码:'\(str)'")
}

3、枚举的内存布局

1)原始值枚举

MemoryLayout.size // 1,实际用到的空间大小

MemoryLayout.alignment // 1,对齐参数

MemoryLayout.stride // 1,分配的空间大小

2)关联值枚举

MemoryLayout.size // 33,实际用到的空间大小

MemoryLayout.alignment // 8,对齐参数

MemoryLayout.stride // 40,分配的空间大小

原始值枚举只需要1个字节用于区分是哪个类型即可;关联值实际上只需要最大枚举类型需要的内存大小,外加一个1字节用于区分枚举类型。再结合内存对齐,最终是对齐参数的倍数。