一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第22天,点击查看活动详情。
在枚举变量初始化时,开发者可以使用枚举类型加点语法的方式,如果这个枚举有指定的原始值,也可以通过枚举值的原始值来完成枚举实例的构造,示例如下:
enum IntEnum: Int {
///第一个枚举值的原始值设置为1
case a = 1
///默认原始值为2
case b
///默认原始值为3
case c
///默认原始值为4
case d
}
///通过原始值构造枚举变量a
var intEnum = IntEnum(rawValue: 1)
需要注意,通过原始值进行枚举实例的构造时,是有可能构造失败的,因为开发者传入的原始值不一定会对应某一个枚举值。因此,这个方法实际上返回的是一个Optional类型的可选值,如果构造失败,则会返回nil。
枚举的相关值
在定义枚举值的时候,开发者可以为其设置一个参数列表,这个参数列表被称为枚举的相关值。示例如下:
///定义形状枚举
enum Shape {
///圆形,设置圆心和半径为相关值
case circle(center: (Double, Double), radius: Double)
///矩形,设置中心,宽高为相关值
case rect(center: (Double, Double), width: Double, height: Double)
///三角形,设置三个顶点为相关值
case triangle(point1: (Double, Double), point2: (Double, Double), point3: (Double, Double))
}
在创建相关值枚举的时候,开发者需要提供参数列表中所需要的参数,示例如下:
省略......
///创建圆形,圆心为(0, 0),半径为3
var circle = Shape.circle(center: (0, 0), radius: 3)
///创建矩形,中心点为(1, 1), 宽度为10,高度为15
var rect = Shape.rect(center: (1, 1), width: 10, height: 15)
///创建三角形,顶点为(2, 2), (3, 3), (2, 5)
var triangle = Shape.triangle(point1: (2, 2), point2: (3, 3), point3: (2, 5))
模式匹配
在switch-case结构语句中,匹配到枚举后,可以通过参数捕获的方式来获取枚举实例的相关值,这里捕获到的相关值参数可以在开发者的代码中使用,示例如下:
///定义形状枚举
enum Shape {
///圆形,设置圆心和半径为相关值
case circle(center: (Double, Double), radius: Double)
///矩形,设置中心,宽高为相关值
case rect(center: (Double, Double), width: Double, height: Double)
///三角形,设置三个顶点为相关值
case triangle(point1: (Double, Double), point2: (Double, Double), point3: (Double, Double))
}
///创建圆形,圆心为(0, 0),半径为3
var circle = Shape.circle(center: (0, 0), radius: 3)
///创建矩形,中心点为(1, 1), 宽度为10,高度为15
var rect = Shape.rect(center: (1, 1), width: 10, height: 15)
///创建三角形,顶点为(2, 2), (3, 3), (2, 5)
var triangle = Shape.triangle(point1: (2, 2), point2: (3, 3), point3: (2, 5))
func ShapeFunc(param: Shape) {
switch param {
case let .circle(center, radius):
print("此圆的圆心为:(center),半径为:(radius)")
case let .rect(center, width, height):
print("此矩形的中心为:(center),宽为:(width),高为:(height)")
case let .triangle(point1, point2, point3):
print("此三角形的3个顶点为:(point1),(point2),(point3)")
}
}
ShapeFunc(param: circle)
ShapeFunc(param: rect)
ShapeFunc(param: triangle)