enum 原始值
优质
小牛编辑
127浏览
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