enum 原始值

优质
小牛编辑
120浏览
2023-12-01

enum 原始值

  • 枚举成员可以用相同类型的默认值预先填充(称为原始值)

e.g.

enum ASCIIControlCharacter: Character {
    case tab = "\t"
    case lineFeed = "\n"
    case carriageReturn = "\r"
}
  • 当在操作存储证书或字符串原始值枚举的时候, 不必显示的给每一个成员都分配一个原始值. 当没有分配至, Swift会自动为其分配值

e.g.

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

enum CompassPoint: String {
    case north, south, east, west
}
  • 如果用原始值类型来定义一个枚举, 那么枚举就会自动收到一个可以接受原始值类型的值的初始化器(叫做rawValue的形式参数)然后返回一个枚举成员或者nil. 你可以通过这个初始化器来尝试创建一个枚举的新实例

e.g.

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

let possiblePlanet = Planet(rawValue: 7)
print(possiblePlanet)

输出结果:

Optional(__lldb_expr_11.Planet.uranus)

即便没有给首个枚举元素初始值, 只要在定义枚举的时候指定了类型, 就会有这个初始化器方法

e.g.

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

let possiblePlanet = Planet(rawValue: 1)
print(possiblePlanet)

输出结果:

Optional(__lldb_expr_21.Planet.venus)

换成String再试一下

enum Planet: String {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

let possiblePlanet = Planet(rawValue: "mercury")
print(possiblePlanet)

输出结果:

Optional(__lldb_expr_23.Planet.mercury)

也是可以的 但是当我输入一个不存在的值时:

enum Planet: String {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

let possiblePlanet = Planet(rawValue: "mercury1")
print(possiblePlanet)

输出结果:

nil

下一篇-enum 关联值