Swift 列舉
阿新 • • 發佈:2019-01-30
感謝原作者 連結:http://www.cocoachina.com/newbie/basic/2014/0611/8771.html
列舉定義了一個通用型別的一組相關的值,使你可以在你的程式碼中以一個安全的方式來使用這些值。
如果你熟悉 C 語言,你就會知道,在 C 語言中列舉指定相關名稱為一組整型值。Swift 中的列舉更加靈活,不必給每一個列舉成員(enumeration member)提供一個值。如果一個值(被認為是“原始”值)被提供給每個列舉成員,則該值可以是一個字串,一個字元,或是一個整型值或浮點值。 此外,列舉成員可以指定任何型別的關聯值儲存到列舉成員值中,就像其他語言中的聯合體(unions)和變體(variants)。你可以定義一組通用的相關成員作為列舉的一部分,每一組都有不同的一組與它相關的適當型別的數值。 在 Swift 中,列舉型別是一等(first-class)型別。它們採用了很多傳統上只被類所支援的特徵,例如計算型屬性(computed properties),用於提供關於列舉當前值的附加資訊,例項方法(instance methods),用於提供和列舉所代表的值相關聯的功能。列舉也可以定義構造器(initializers)來提供一個初始成員值;可以在原始的實現基礎上擴充套件它們的功能;可以遵守協議(protocols)來提供標準的功能。 欲瞭解更多相關功能,請參考屬性,方法,構造過程,擴充套件,和協議。 列舉語法(Enumeration Syntax)- enum SomeEumeration {
- // enumeration definition goes here
- }
- enum CompassPoint {
- case North
- case South
- case East
- case West
- }
- enum
- case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Nepturn
- }
- var directionToHead = CompassPoint.West
- directionToHead = .East
- directionToHead = .South
- switch directionToHead {
- case .North:
- println("Lots of planets have a north")
- case .South:
- println("Watch out for penguins")
- case .East:
- println("Where the sun rises")
- case .West:
- println("Where the skies are blue")
- }
- // prints "Watch out for penguins”
- let somePlanet = Planet.Earth
- switch somePlanet {
- case .Earth:
- println("Mostly harmless")
- default:
- println("Not a safe place for humans")
- }
- // prints "Mostly harmless”
- enum Barcode {
- case UPCA(Int, Int, Int)
- case QRCode(String)
- }
- var productBarcode = Barcode.UPCA(8, 85909_51226, 3)
- productBarcode = .QRCode("ABCDEFGHIJKLMNOP")
- switch productBarcode {
- case .UPCA(let numberSystem, let identifier, let check):
- println("UPC-A with value of \(numberSystem), \(identifier), \(check).")
- case .QRCode(let productCode):
- println("QR code with value of \(productCode).")
- }
- // prints "QR code with value of ABCDEFGHIJKLMNOP.”
- switch productBarcode {
- case let .UPCA(numberSystem, identifier, check):
- println("UPC-A with value of \(numberSystem), \(identifier), \(check).")
- case let .QRCode(productCode):
- println("QR code with value of \(productCode).")
- }
- // prints "QR code with value of ABCDEFGHIJKLMNOP."
- 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
- }
- let earthsOrder = Planet.Earth.toRaw()
- // earthsOrder is 3
- let possiblePlanet = Planet.fromRaw(7)
- // possiblePlanet is of type Planet? and equals Planet.Uranus
- let positionToFind = 9
- if let somePlanet = Planet.fromRaw(positionToFind) {
- switch somePlanet {
- case .Earth:
- println("Mostly harmless")
- default:
- println("Not a safe place for humans")
- }
- } else {
- println("There isn't a planet at position \(positionToFind)")
- }
- // prints "There isn't a planet at position 9