Published 2022-03-08

Swift - 枚举

枚举是一种定义通用类型的方式,它定义了一组相关值的列表。每个枚举成员都代表了一个具体的值,并且可以附加额外的信息,例如关联值或原始值。

以下是一个简单的示例,用于定义枚举类型 CompassPoint,该类型表示了四个基本的方向:

enum CompassPoint {
  case north
  case south
  case east
  case west
}
 
var direction = CompassPoint.north

在上面的示例中,CompassPoint 是一个枚举类型,它包含了四个成员,每个成员代表一个基本的方向。direction 是一个变量,它的类型是 CompassPoint,它被初始化为 CompassPoint.north。

枚举成员可以包含关联值,这些关联值可以是任何类型。例如,以下是一个枚举类型 Barcode,它可以表示一个标准的商品条形码或一个自定义的二维码:

  case upc(Int, Int, Int, Int)
  case qrCode(String)
}
 
var productBarcode = Barcode.upc(8, 85909, 51226, 3)

在上面的示例中,Barcode 是一个枚举类型,它包含了两个成员,一个是 upc,它使用四个 Int 类型的关联值表示商品的标准条形码;另一个是 qrCode,它使用一个 String 类型的关联值表示自定义的二维码。productBarcode 是一个变量,它的类型是 Barcode,它被初始化为 Barcode.upc。

枚举成员还可以包含原始值,这些原始值可以是任何类型,但必须是相同的类型。原始值可以是字符串、字符、整数或浮点数。例如,以下是一个枚举类型 Planet,它使用浮点数原始值表示每个行星的相对质量:

enum Planet: Double {
  case mercury = 0.055
  case venus = 0.815
  case earth = 1.0
  case mars = 0.107
  case jupiter = 318.0
  case saturn = 95.0
  case uranus = 14.0
  case neptune = 17.0
}
 
let earthWeight = 70.0
let planet = Planet.jupiter
let relativeWeight = planet.rawValue * earthWeight

在上面的示例中,Planet 是一个枚举类型,它使用浮点数原始值表示每个行星的相对质量。earthWeight 是一个 Double 类型的常量,表示一个人在地球上的体重。planet 是一个变量,它的类型是 Planet,它被初始化为 Planet.jupiter。relativeWeight 是一个常量,它的值是 Jupiter 相对于地球的质量与 earthWeight 的乘积。