Skip to content

Enum 枚举

例子

使用 enumcase 声明枚举

swift
// 首字母大写
enum Weekday {
  case Mon
  case Tue
  case Wed
  case Thu
  case Fri
  case Sat
  case Sun
}

var a = Weekday.Mon

print(a) // Mon
print(type(of: a)) // Weekday

也可以使用单行输入的方式

swift
enum Position {
  case top, right, bottom, left
}

var a = Position.right

print(a) // right
print(type(of: a)) // Position

修改值

如果想要修改一个枚举,可以使用只要 . 即可修改

swift
enum Position {
  case top, right, bottom, left
}

var a = Position.right

a = .top

print(a) // top

匹配

可以使用 . 直接快速匹配

swift
enum Position {
  case top, right, bottom, left
}

var a = Position.right

switch a {
  case .bottom:
  print("下")

  case .top:
  print("上")

  case .right:
  print("右")

  case .left:
  print("左")
}

枚举的关联值

枚举可以添加一些关联值

swift
enum Position {
  case top
  case right(size: Int)
  case bottom(size: Int)
  case left(size: Int, height: Int)
}

var a = Position.right(size: 20)

switch a {
  case .bottom:
  print("下")

  case .top:
  print("上")

  case .right(let size):
  print("右\(size)")

  case .left(let size, let height):
  print("左\(size)\(height)")
}

遍历枚举

正常情况下枚举是不能遍历的,如果希望遍历需要给枚举添加 CaseIterable 可遍历协议,再使用 allCases 字段来实现遍历

swift
enum Position: CaseIterable {
  case top, right, bottom, left
}

for i in Position.allCases {
  print(i)
}

设置和获取值

枚举可以设置每一项的值,并且可以使用 rawValue 获取值的内容

swift
enum Position: Int {
  case top = 1
  case right = 2
  case bottom = 3
  case left = 4
}

print(Position.bottom.rawValue)