与C或者Objective-C不同的是,在Swift语言中枚举类型的成员初始的时候不会被默认赋值成整数值,不同的枚举成员将要用什么类型以及赋值什么值都是可以自己控制的,可以在定义CompassPoint这个枚举的时候指定.
枚举语法
//多行定义
enum CompassPoint {
case North
case South
case East
case West
}
//一行定义
enum Plant{
case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
//带关联值
enum Barcode {
case UPCA(Int, Int, Int)
case QRCode(String)
}
//带原始值的,原始值必须不同,否则编译报错
enum ASCIIControlCharacter: Character {
case Tab = "\t"
case LineFeed = "\n"
case CarriageReturn = "\r"
}
//原始值是整数类型,那么当其他枚举成员没有设置原始值的时候,他们的原始值是这个整型原始值自增长设置的。venus=2....
enum Planet: Int {
case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
使用枚举
每个枚举的定义都是定义了一个全新的类型,就像Swfit中的其他的类型一样
var directionToHead = CompassPoint.West //directionToHead被推断为CompassPoint类型
directionToHead = .East //directionToHead已经为CompassPoint类型,可以简写
//使用Switch语句来匹配枚举值
directionToHead = .South
switch directionToHead {
case .North:
print("Lots of planets have a north")
case .South:
print("Watch out for penguins")
case .East:
print("Where the sun rises")
case .West:
print("Where the skies are blue")
}
// 输出"Watch out for penguins”
//带关联值的
switch productBarcode {
//获取关联值,定义为不可变let
case .UPCA(let numberSystem, let identifier, let check):
print("UPC-A with value of \(numberSystem), \(identifier), \(check).")
//将关联值定义为可变var
case .QRCode(var productCode):
productCode = "abcdefghijklmnop"
print("QR code with value of \(productCode).")
}
switch productBarcode {
//关联的所有值都被当做不可变变量
case let .UPCA(numberSystem, identifier, check):
print("UPC-A with value of \(numberSystem), \(identifier), \(check).")
case let .QRCode(productCode):
print("QR code with value of \(productCode).")
}
//通过枚举成员的toRaw()方法来获取他的原始值
let earthsOrder = Planet.Earth.rawValue
print(earthsOrder)//3
//fromRaw()方法来尝试通过一个原始值来寻找他所对应的枚举成员
let possiblePlanet = Planet(rawValue: 7)
print(possiblePlanet)//Optional(SwiftDemo.Planet.Uranus)
//原始值没有对应枚举成员的话返回nil
let possiblePlanet = Planet(rawValue: 9)
print(possiblePlanet)//nil
网友评论