Swift 枚举

在 Swift 中,枚举(enum,enumeration 的缩写)是一种用户定义的,具有固定相关值的集合的数据类型。

我们使用 enum 关键字来创建枚举。例如:

enum Season {
  case spring, summer, autumn, winter
}

这里,

  • Season - 枚举的名称
  • spring/summer/autumn/winter - 枚举内部定义的值

注意:枚举的值也称为枚举成员(enum cases)。我们使用 case 关键字在枚举内部声明值。


创建枚举变量

由于枚举是一种数据类型,我们可以创建枚举类型的变量。例如:

var currentSeason: Season

在此,currentSeason 是一个 Season 类型的变量。它只能存储枚举内部存在的值(springsummerautumnwinter)。

给枚举变量赋值

我们使用枚举名称和 . 符号来给枚举变量赋值。例如:

// assign summer to currentSeason variable
var currentSeason = Season.summer

在这里,我们将成员值 summer 赋值给了枚举变量 currentSeason


示例:Swift 枚举

// define enum 
enum Season {
  
  // define enum values
  case spring, summer, autumn, winter
}

// create enum variable
var currentSeason: Season

// assign value to enum variable
currentSeason = Season.summer

print("Current Season:", currentSeason)

输出

Current Season: summer

在上面的例子中:

  • Season - 一个包含 4 个值的枚举:springsummerautumnwinter
  • currentSeason - 枚举类型的变量
  • currentSeason = Season.summer - 将枚举值赋给 currentSeason

注意:与变量类似,我们也可以在一行中创建枚举变量并赋值。例如:

var lastSeason = Season.spring

Swift 枚举与 Switch 语句

我们也可以在 Swift 中将枚举与 switch 语句结合使用。例如:

enum PizzaSize {
  case small, medium, large
}

var size = PizzaSize.medium

switch(size) {
  case .small:
    print("I ordered a small size pizza.")

  case .medium:
    print("I ordered a medium size pizza.")

   case .large:
     print("I ordered a large size pizza.");
}

输出

I ordered a medium size pizza. 

在上面的示例中,我们创建了一个名为 PizzaSize 的枚举,其值为:smallmediumlarge。请注意这行代码:

var size = PizzaSize.medium

在这里,我们将值 medium 赋给了枚举变量 size

我们在 switch 语句中使用了枚举变量 size。然后,将此值与每个 case 语句的值进行比较。

由于值与 case .medium 匹配,因此将执行该 case 内的语句。


遍历枚举成员

在 Swift 中,我们使用 CaseIterable 协议来遍历枚举。例如:

enum Season: CaseIterable {
  ...
}

现在我们可以使用 allCases 属性来循环遍历枚举的每个成员。

for currentSeason in Season.allCases {
   ...
}

示例:遍历枚举成员

// conform Languages to caseIterable 
enum Season: CaseIterable {
  case spring, summer, autumn, winter 
}

// for loop to iterate over all cases
for currentSeason in Season.allCases {
  print(currentSeason)
}

输出

spring
summer
autumn
winter

在上面的示例中,我们将 CaseIterable 协议与 Season 枚举进行了关联。

然后,我们使用 allCases 属性配合 for 循环来遍历枚举的每个成员。


Swift 枚举的原始值(rawValue)

在 Swift 中,我们还可以为每个枚举成员分配值。例如:

enum Size : Int {
  case small = 10
  case medium = 12
  ...
}

在这里,我们分别为枚举成员 smallmedium 分配了值 1012。这些值被称为原始值(raw values)

请注意,我们在枚举名称后使用了 Int 来定义枚举成员只能包含整数原始值。

访问枚举原始值

要访问枚举的原始值,我们使用 rawValue 属性。例如:

// access raw value 
Size.small.rawValue

在这里,我们访问了 medium 成员的值。


示例:带原始值的枚举

enum Size : Int {
  case small = 10
  case medium = 12
  case large = 14
}

// access raw value of python case
var result = Size.small.rawValue
print(result)

输出

10

在上面的示例中,我们创建了一个名为 Size 的枚举,其原始值的类型为 Int

在这里,我们使用 rawValue 属性访问了 small 成员的值。

注意:原始值可以是字符串、字符、整数或浮点数类型。


Swift 枚举的关联值(Associated Values)

在 Swift 中,我们还可以为枚举成员附加额外的信息。例如:

enum Laptop {
  
  // associate value 
  case name(String)
  ...
}

在这里,对于 name 成员,我们可以附加一个 String 类型的值。

现在,我们可以为该成员分配关联值。

Laptop.name("Razer")

在此,Razername 成员的关联值。


示例:枚举关联值

enum Laptop {

  // associate string value
  case name(String)

  // associate integer value  
  case price (Int)
}

// pass string value to name
var brand = Laptop.name("Razer")
print(brand)

// pass integer value to price
var offer = Laptop.price(1599)
print(offer)

输出

name("Razer")
price(1599)

在上面的示例中,关联值

  • Razor 被赋给了 name 成员。
  • 1599 被赋给了 price 成员。

要了解更多关于关联值的信息,请访问Swift 枚举关联值

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战