1. 在Swift和Java关于枚举方面,两个语言语法类似。less
Swift定义枚举:ide
enum CompassPoint{ case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune }
Java定义枚举:函数
public enum ColorSelect { red, green, yellow, blue; }
2. 枚举和switch结合使用this
Swift代码以下:spa
enum CompassPoint{ case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune } let directionToHead = CompassPoint.Venus switch directionToHead { case CompassPoint.Earth : print("this is \(directionToHead)") case CompassPoint.Venus : print("this is \(directionToHead)") case CompassPoint.Mercury : print("this is \(directionToHead)") case CompassPoint.Jupiter : print("this is \(directionToHead)") }
2.1 switch
的 case 分支代码中提取每一个相关值做为一个常量(用let
前缀)或者做为一个变量(用var
前缀)来使用:代码以下:code
enum Barcode { case UPCA(Int, Int, Int) case QRCode(String) } var productBarcode = Barcode.UPCA(8, 85909_51226, 3) productBarcode = .QRCode("ABCDEFGHIJKLMNOP") 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).") } // 输出 "QR code with value of ABCDEFGHIJKLMNOP."
2.2 原始值(Raw Values):枚举成员能够被默认值(称为原始值)预先填充,其中这些原始值具备相同的类型。blog
enum ASCIIControlCharacter: Character { case Tab = "\t" case LineFeed = "\n" case CarriageReturn = "\r" }
原始值能够是字符串,字符,或者任何整型值或浮点型值。每一个原始值在它的枚举声明中必须是惟一的。当整型值被用于原始值,若是其余枚举成员没有值时,它们会自动递增。字符串
enum Planet: Int { case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune }
使用枚举成员的rawValue
属性能够访问该枚举成员的原始值,经过参数为rawValue
构造函数建立特定原始值的枚举。代码以下:it
let earthsOrder = Planet.Earth.rawValue // earthsOrder is 3 let possiblePlanet = Planet(rawValue: 7) // possiblePlanet is of type Planet? and equals Planet.Uranus
然而,并不是全部可能的Int
值均可以找到一个匹配的行星。正由于如此,构造函数能够返回一个可选的枚举成员。在上面的例子中,possiblePlanet
是Planet?
类型,或“可选的Planet
”。io
若是你试图寻找一个位置为9的行星,经过参数为rawValue
构造函数返回的可选Planet
值将是nil
:
enum Planet: Int { case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune } let positionToFind = 9 if let somePlanet = Planet(rawValue: positionToFind) { switch somePlanet { case .Earth: print("Mostly harmless") default: print("Not a safe place for humans") } } else { print("There isn't a planet at position \(positionToFind)") }
这个范例使用可选绑定(optional binding),经过原始值9
试图访问一个行星。if let somePlanet = Planet(rawValue: 9)
语句得到一个可选Planet
,若是可选Planet
能够被得到,把somePlanet
设置成该可选Planet
的内容。在这个范例中,没法检索到位置为9
的行星,因此else
分支被执行。