推荐答案
在 Swift 中,枚举成员的原始值(Raw Value)是为枚举成员预先分配的一个默认值。原始值可以是字符串、字符、整数或浮点数类型。每个枚举成员的原始值在定义枚举时被指定,并且在枚举的整个生命周期中保持不变。
enum Direction: String { case north = "North" case south = "South" case east = "East" case west = "West" }
在这个例子中,Direction
枚举的每个成员都有一个 String
类型的原始值。例如,Direction.north
的原始值是 "North"
。
本题详细解读
原始值的定义
原始值是在定义枚举时为每个成员指定的固定值。原始值可以是以下类型之一:
- 整数(
Int
) - 浮点数(
Float
或Double
) - 字符串(
String
) - 字符(
Character
)
原始值在枚举定义时被指定,并且不能更改。
原始值的访问
可以通过枚举成员的 rawValue
属性来访问其原始值:
let direction = Direction.north print(direction.rawValue) // 输出: "North"
原始值的自动分配
如果枚举的原始值类型是整数或字符串,Swift 可以自动为枚举成员分配原始值。
整数类型:如果没有显式指定原始值,Swift 会从 0 开始自动递增分配原始值。
enum Planet: Int { case mercury = 1, venus, earth, mars } print(Planet.earth.rawValue) // 输出: 3
字符串类型:如果没有显式指定原始值,Swift 会使用枚举成员的名称作为原始值。
enum CompassPoint: String { case north, south, east, west } print(CompassPoint.north.rawValue) // 输出: "north"
原始值的初始化
可以通过原始值来初始化枚举成员。如果提供的原始值匹配某个枚举成员的原始值,则返回对应的枚举成员;否则返回 nil
。
if let direction = Direction(rawValue: "North") { print("方向是 \(direction)") } else { print("无效的方向") }
原始值与关联值的区别
- 原始值:是枚举成员的一个固定值,定义时指定,不能更改。
- 关联值:是枚举成员的一个可变值,可以在创建枚举实例时指定,并且每个实例可以有不同的关联值。
enum Barcode { case upc(Int, Int, Int, Int) case qrCode(String) }
在这个例子中,Barcode
枚举的成员 upc
和 qrCode
有关联值,而不是原始值。