Swift 枚举关联值
在本教程中,我们将借助实例学习 Swift 枚举中的关联值。
在 Swift 枚举 中,我们学习了如何定义具有一组固定相关值的数据类型。
然而,有时我们可能需要将附加信息附加到枚举值。附加到枚举值的这些附加信息称为关联值。
让我们看一个例子,
enum Distance {// associate valuecase km(String)...}
这里,(String)是附加到值 km 的附加信息。它表示 km 的值只能是 String。
现在,我们将如何将关联值赋给枚举值。
实例:枚举关联值
enum Distance {// associate valuecase km(String)case miles(String)}// pass string value to kmvar dist1 = Distance.km("Metric System")print(dist1)// pass string value to milesvar dist2 = Distance.miles("Imperial System")print(dist2)
结果如下:
km("Metric System")miles("Imperial System")
在上面的实例中,我们创建了一个名为 Distance 的枚举,该枚举具有以下关联值:
- "Metric System" 赋值给 km 值
- "Imperial System" 赋值给 miles 值
关联多个值
在 Swift 中,我们还可以将多个值与单个枚举值相关联。例如,
enum Marks {// associate multiple Double valuescase gpa(Double, Double, Double)// associate multiple String valuescase grade(String, String, String)}// pass three Double values to gpavar marks1 = Marks.gpa(3.6, 2.9, 3.8)print(marks1)// pass three string values to gradevar marks2 = Marks.grade("A", "B", "C")print(marks2)
结果如下:
gpa(3.6, 2.9, 3.8)grade("A", "B", "C")
这里,我们创建了一个具有两个值的枚举:gpa 和 grade。注意枚举值,
// associate multiple Double valuescase gpa(Double, Double, Double)// associate multiple String valuescase grade(String, String, String)
这表明我们必须将 3 个 Double 和 String 值分别与 gpa 和 grade 相关联。这些关联值也称为 元组。
因此,我们将 3.6、2.9、3.8 附加到 gpa。
// pass three integer values to gpavar marks1 = Marks.gpa(3.5, 2.9, 3.8)
并且,我们在 grade 上附加了 "A"、"B"、"C"。
// pass three string values to gradevar marks2 = Marks.grade("A", "B", "C")
命名关联值
在 Swift 中,我们还可以为关联值提供一个名称,以使代码更具可读性。例如,
enum Pizza {case small(inches: Int)}
在这里,我们为关联值提供了名称 inches。
当读取指定的关联值而不是
case small(Int)
实例:命名关联值
enum Pizza {// named associated valuecase small (inches: Int)case medium (inches: Int)case large (inches: Int)}// pass value using provided namesvar pizza1 = Pizza.medium(inches: 12)print(pizza1)
结果如下:
medium(inches: 12)
在上面的实例中,我们为关联的值提供了名称 inches。
在向 case 传递关联值时,我们使用了提供的名称,
Pizza.medium(inches: 12)
枚举关联值和 Switch 语句
我们可以使用 Swift switch 语句 来匹配枚举关联的值。例如,
enum Mercedes {case sedan(height: Double)case suv(height: Double)case roadster(height: Double)}var choice = Mercedes.suv(height: 5.4)switch(choice) {case let .sedan(height):print("Height:", height)case let .suv(height):print("Height:", height)case let .roadster(height):print("Height:", height)}
结果如下:
Height: 5.4
在上面的实例中,我们使用 switch 语句来匹配枚举关联的值。请注意这句,
var choice = Mercedes.suv(height: 5.4)
在这里,我们将 5.4 附加到 suv,并将其赋值给枚举变量 choice。
然后,我们在 switch 语句中使用 choice 来比较枚举 case 和每个 case 语句的值。请注意 switch case 语句,
case let .suv(height):
这里,让我们将关联的值绑定到 height 变量,我们可以在 case 主体中使用它。
由于该值与 case-let.suv 匹配,因此执行 case 中的语句。
原始值与关联值
在 Swift 中,原始值是提供给每个枚举值的预定义常量值。例如,
enum Vehicle: String {case car = "Four Wheeler"case bike = "Two Wheeler"}
在这里,我们分别为 car 和 bike 提供了原始值:"Four Wheeler" 和 "Two Wheeler"。
然而,关联的值更像是与枚举值关联的变量。例如,
var marks = Marks.grade("A")
注意:
- 枚举不能同时具有原始值和关联值。
- 枚举的原始值必须具有相同的数据类型。但关联值可以是任何类型。