21.4_原始值
原始值的魅力 ✨
枚举的原始值是一个非常强大的特性,它允许你为枚举成员预设一个默认值。想象一下,你正在构建一个应用程序,需要表示一周中的几天。使用原始值,你可以轻松地将每个工作日与一个整数值关联起来,比如星期一对应 1,星期二对应 2,以此类推。这使得数据处理变得异常简洁和高效!
定义原始值类型 🚀
在 Swift 中,你可以为枚举定义一个原始值类型。这个类型可以是字符串、字符,或者任何整数或浮点数类型。最常见的是使用 Int 或 String。当你定义了原始值类型后,每个枚举成员都可以拥有一个唯一的原始值。这就像给每个成员一个专属的“身份证号”!
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 枚举的原始值类型是 Int。monday 被明确赋值为 1。
隐式赋值的便利 💡
Swift 提供了一个非常贴心的功能:隐式赋值。如果你没有为每个枚举成员明确指定原始值,Swift 会自动为你生成。对于整数原始值,它会从上一个成员的值递增 1。如果第一个成员没有赋值,它将默认为 0。对于字符串原始值,它会使用成员的名称作为其原始值。这大大减少了你的工作量!
整数类型:
swiftenum Planet: Int { case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune }在这里,
mercury的原始值是1,那么venus自动就是2,earth自动就是3,以此类推。字符串类型:
swiftenum CompassPoint: String { case north, south, east, west }north的原始值将是"north",south将是"south"。是不是超级方便?
访问原始值 🎯
要访问枚举成员的原始值,你只需使用 .rawValue 属性。这就像打开一个宝箱,直接取出里面的宝藏!
let today = Weekday.wednesday
print("今天是星期 \(today.rawValue)") // 输出 "今天是星期 3"
let direction = CompassPoint.east
print("方向是 \(direction.rawValue)") // 输出 "方向是 east"通过 .rawValue,你可以轻松地将枚举值转换为其对应的原始数据类型,这在与外部系统交互或进行数据存储时非常有用。
从原始值初始化枚举 🔄
你甚至可以通过原始值来尝试创建一个枚举实例!这就像你知道一个“身份证号”,然后去查找对应的人。Swift 提供了一个可失败的初始化器 init?(rawValue:)。如果提供的原始值与任何枚举成员的原始值都不匹配,初始化将失败,返回 nil。
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 枚举不可或缺的一部分!🚀