📅  最后修改于: 2023-12-03 14:47:47.999000             🧑  作者: Mango
枚举(Enum)就是一个带有可选值的数据类型,在 Swift 中,枚举是一级类型(First-class Type),它支持许多其他语言不支持的特性,如关联值(Associated Values)、原始值(Raw Values)、递归枚举(Recursive Enums)等。
在 Swift 中,使用 enum
关键字来声明和定义一个枚举。下面是一个定义 Season
枚举的例子:
enum Season {
case spring
case summer
case autumn
case winter
}
在上面的例子中,我们定义了一个 Season
枚举类型,并且它有四个枚举成员 spring
、summer
、autumn
和 winter
。
我们也可以使用一行来定义上面的枚举:
enum Season { case spring, summer, autumn, winter }
枚举成员可以通过点(.)语法来访问,可以和其他类型的属性或方法一样来使用:
let currentSeason = Season.summer
print(currentSeason) // 输出: summer
switch currentSeason {
case .spring:
print("It's spring.")
case .summer:
print("It's summer.")
case .autumn:
print("It's autumn.")
case .winter:
print("It's winter.")
}
上面的示例展示了如何使用枚举成员来进行流程控制,使用 switch
语句来判断当前的季节,并输出对应的信息。
枚举的每个成员都可以关联一些值。这些关联值可以是任何类型,可以是一个或多个值,而且可以在枚举成员的定义时指定。
下面是一个定义 Student
枚举的例子,其中每个成员都关联一个字符串类型的值:
enum Student {
case elementary(name: String)
case middle(name: String)
case high(name: String, grade: Int)
}
let stu1 = Student.elementary(name: "Tom")
let stu2 = Student.middle(name: "Bob")
let stu3 = Student.high(name: "Lucy", grade: 9)
上面的例子中,定义了一个 Student
枚举类型,并且定义了三个枚举成员 elementary
、middle
和 high
,分别关联了不同的值。
在 Swift 中,枚举成员也可以有原始值(Raw Values)。原始值是每个枚举成员提供的一个初始值,它可以是一个字符、整数或字符串等。
在声明一个枚举类型时,可以为其中某些成员分配原始值,这些原始值必须是唯一的。下面是一个定义 Weekday
枚举的例子,其中使用字符串类型的原始值:
enum Weekday: String {
case monday = "Monday"
case tuesday = "Tuesday"
case wednesday = "Wednesday"
case thursday = "Thursday"
case friday = "Friday"
case saturday = "Saturday"
case sunday = "Sunday"
}
print(Weekday.monday.rawValue) // 输出: Monday
上面的示例中,我们定义了一个 Weekday
枚举类型,并且为其中的每个枚举成员分配了一个字符串类型的原始值。在输出成员的原始值时,可以使用 rawValue
属性来访问。
递归枚举(Recursive Enums)是一种特殊类型的枚举,它包含一个或多个成员,其中至少一个成员的关联值是该枚举类型本身。递归枚举通常用于表示一些具有自相似性质的数据。
下面是一个定义 Node
递归枚举的例子,其中每个成员都包含了一个或多个嵌套的 Node
实例:
indirect enum Node {
case leaf(Int)
case node(left: Node, right: Node)
}
let tree: Node = .node(left: .node(left: .leaf(1), right: .leaf(2)), right: .node(left: .leaf(3), right: .leaf(4)))
上面的示例中,我们定义了一个 Node
递归枚举类型,其中一个成员 node
的关联值包含了两个嵌套的 Node
实例。在对 tree
的赋值中,我们使用了嵌套的 node
和 leaf
成员来构造了一棵树形结构。
Swift 中的枚举是一种强大而灵活的数据类型,支持许多特性,如关联值、原始值、递归枚举等。在开发中,合理地使用枚举可以让我们的代码更加简洁、清晰、易读和易于维护。