Swift 枚举关联值
在本教程中,我们将借助实例学习 Swift 枚举中的关联值。
在 Swift 枚举 中,我们学习了如何定义具有一组固定相关值的数据类型。
然而,有时我们可能需要将附加信息附加到枚举值。附加到枚举值的这些附加信息称为关联值。
让我们看一个例子,
enum Distance {
// associate value
case km(String)
...
}
这里,(String
)是附加到值 km 的附加信息。它表示 km 的值只能是 String
。
现在,我们将如何将关联值赋给枚举值。
实例:枚举关联值
enum Distance {
// associate value
case km(String)
case miles(String)
}
// pass string value to km
var dist1 = Distance.km("Metric System")
print(dist1)
// pass string value to miles
var 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 values
case gpa(Double, Double, Double)
// associate multiple String values
case grade(String, String, String)
}
// pass three Double values to gpa
var marks1 = Marks.gpa(3.6, 2.9, 3.8)
print(marks1)
// pass three string values to grade
var marks2 = Marks.grade("A", "B", "C")
print(marks2)
结果如下:
gpa(3.6, 2.9, 3.8)
grade("A", "B", "C")
这里,我们创建了一个具有两个值的枚举:gpa
和 grade
。注意枚举值,
// associate multiple Double values
case gpa(Double, Double, Double)
// associate multiple String values
case grade(String, String, String)
这表明我们必须将 3 个 Double 和 String 值分别与 gpa
和 grade
相关联。这些关联值也称为 元组。
因此,我们将 3.6、2.9、3.8 附加到 gpa
。
// pass three integer values to gpa
var marks1 = Marks.gpa(3.5, 2.9, 3.8)
并且,我们在 grade
上附加了 "A"、"B"、"C"。
// pass three string values to grade
var marks2 = Marks.grade("A", "B", "C")
命名关联值
在 Swift 中,我们还可以为关联值提供一个名称,以使代码更具可读性。例如,
enum Pizza {
case small(inches: Int)
}
在这里,我们为关联值提供了名称 inches
。
当读取指定的关联值而不是
case small(Int)
实例:命名关联值
enum Pizza {
// named associated value
case small (inches: Int)
case medium (inches: Int)
case large (inches: Int)
}
// pass value using provided names
var 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")
注意:
- 枚举不能同时具有原始值和关联值。
- 枚举的原始值必须具有相同的数据类型。但关联值可以是任何类型。