Skip to content

21.4_原始值

原始值的魅力 ✨

枚举的原始值是一个非常强大的特性,它允许你为枚举成员预设一个默认值。想象一下,你正在构建一个应用程序,需要表示一周中的几天。使用原始值,你可以轻松地将每个工作日与一个整数值关联起来,比如星期一对应 1,星期二对应 2,以此类推。这使得数据处理变得异常简洁和高效!

定义原始值类型 🚀

在 Swift 中,你可以为枚举定义一个原始值类型。这个类型可以是字符串、字符,或者任何整数或浮点数类型。最常见的是使用 IntString。当你定义了原始值类型后,每个枚举成员都可以拥有一个唯一的原始值。这就像给每个成员一个专属的“身份证号”!

swift
enum Weekday: Int {
    case monday = 1
    case tuesday = 2
    case wednesday = 3
    case thursday = 4
    case friday = 5
    case saturday = 6
    case sunday = 7
}

在这个例子中,Weekday 枚举的原始值类型是 Intmonday 被明确赋值为 1

隐式赋值的便利 💡

Swift 提供了一个非常贴心的功能:隐式赋值。如果你没有为每个枚举成员明确指定原始值,Swift 会自动为你生成。对于整数原始值,它会从上一个成员的值递增 1。如果第一个成员没有赋值,它将默认为 0。对于字符串原始值,它会使用成员的名称作为其原始值。这大大减少了你的工作量!

  • 整数类型

    swift
    enum Planet: Int {
        case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
    }

    在这里,mercury 的原始值是 1,那么 venus 自动就是 2earth 自动就是 3,以此类推。

  • 字符串类型

    swift
    enum CompassPoint: String {
        case north, south, east, west
    }

    north 的原始值将是 "north"south 将是 "south"。是不是超级方便?

访问原始值 🎯

要访问枚举成员的原始值,你只需使用 .rawValue 属性。这就像打开一个宝箱,直接取出里面的宝藏!

swift
let today = Weekday.wednesday
print("今天是星期 \(today.rawValue)") // 输出 "今天是星期 3"

let direction = CompassPoint.east
print("方向是 \(direction.rawValue)") // 输出 "方向是 east"

通过 .rawValue,你可以轻松地将枚举值转换为其对应的原始数据类型,这在与外部系统交互或进行数据存储时非常有用。

从原始值初始化枚举 🔄

你甚至可以通过原始值来尝试创建一个枚举实例!这就像你知道一个“身份证号”,然后去查找对应的人。Swift 提供了一个可失败的初始化器 init?(rawValue:)。如果提供的原始值与任何枚举成员的原始值都不匹配,初始化将失败,返回 nil

swift
if let somePlanet = Planet(rawValue: 5) {
    print("第五颗行星是 \(somePlanet)") // 输出 "第五颗行星是 jupiter"
} else {
    print("没有找到对应的行星")
}

if let unknownPlanet = Planet(rawValue: 10) {
    print("找到了行星 \(unknownPlanet)")
} else {
    print("原始值 10 没有对应的行星。") // 输出 "原始值 10 没有对应的行星。"
}

这个功能在处理来自外部数据源(如 JSON 或数据库)的原始值时非常有用,它能帮助你安全地将这些值转换回 Swift 的强类型枚举。原始值让你的代码更加健壮和灵活,是 Swift 枚举不可或缺的一部分!🚀

本站使用 VitePress 制作