寒城攻略:Listo 教你 25 天学会 Swift 语言 - 10 Enumerations

时间:2021-11-27 19:36:52

import Foundation


//***********************************************************************************************

//1.Enumerations(枚举)

//_______________________________________________________________________________________________

//介绍

//枚举定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这些值

//如果你熟悉 C 语言,你就会知道, C 语言中枚举指定相关名称为一组整型值。Swift 中的枚举更加灵活,不必给每一个枚举成员(enumeration member)提供一个值。如果一个值(被认为是原始)被提供给每个枚举成员,则该值可以是一个字符串,一个字符, 是一个整型值或浮点值


//***********************************************************************************************

//2.Enumeration Syntax(枚举语法)

//_______________________________________________________________________________________________

//使用 enum 关键字创建枚举

enum CompassPoint{      //枚举名一般大写,与 C 不同,Swift 中枚举不会默认元素赋值

    case North

    case South

    case East, West     //多个成员值写在一行时,需要用逗号隔开

}

var dirctionToHead = CompassPoint.North     //使用点语法设置获取枚举成员

println(dirctionToHead)


//***********************************************************************************************

//3.Matching Enumeration Values with a Switch Statement(匹配枚举值和 Switch 语句)

//_______________________________________________________________________________________________

//匹配单个枚举值和 switch 语句

dirctionToHead = .South

switch dirctionToHead{

case .North:

    println("Lots of planets have a north")

case .South:

    println("Watch out for penguins")

case .East:

    println("Where the sun rise")

case .West:

    println("Where the sky is blue")

}


//***********************************************************************************************

//4.Associated Values(关联值)

//_______________________________________________________________________________________________

//介绍

//你可以为 dirction.South 设置一个常量或则变量,并且在之后查看这个值。然而,有时候会很有用如果能够把其他类型的关联值和成员值一起存储起来。这能让你随着成员值存储额外的自定义信息,并且当每次 你在代码中利用该成员时允许这个信息产生变化


//_______________________________________________________________________________________________

//使用两种不同类型的条码跟踪商品例子来演示枚举关联值

enum Barcode{           //定义一个 Barcode 的枚举类型,它可以是 UPCA 的一个关联值(Int, Int, Int),或者是 QRCode 的一个字符串的关联值

    case UPCA(Int, Int, Int)

    case QRCode(String)

}

var productBarcode = Barcode.UPCA(8767887_7867663)      //使用任意一种条码类型创建新的条码

productBarcode = Barcode.QRCode("skdfhjkskdfjkljdk")        //同一个商品可以被分配给不同类型的条码


switch productBarcode{

case .UPCA(let numberSystem, let identifier, let check):

    println("UPCA with value of \(numberSystem)\(identifier)\(check)")

case .QRCode(let productCode):

    println("QR code with value of \(productCode)")

}


//***********************************************************************************************

//4.Raw Value(原始值)

//_______________________________________________________________________________________________

//介绍

//在关联值小节的条形码例子中演示了一个枚举的成员如何声明它们存储不同类型的关联值。作为关联值的替代,枚举成员可以被默认值(称为原始值)预先填充,其中这些原始值具有相同的类型


//_______________________________________________________________________________________________

//枚举成员存储原始 ASCII 值的实例演示枚举原始值定义

enum ASCIIControlCharacter: Character{

    case Tab = "\t"         //设置枚举成员的原始值,当整型数被用作枚举成员的原始值时,成员后面的成员原始值依次递增

    case LineFeed = "\n"

    case CarriageReturn = "\r"

}


enum Plant: Int{

    case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune

}


//_______________________________________________________________________________________________

//使用 rawValue 方法获取枚举成员的原始值

let earthOrder = Plant.Earth.rawValue        //获取到了 earthOrder 的原始值

println(earthOrder)


//_______________________________________________________________________________________________

//使用 rawValue 方法试图找到具有特定原始值的枚举成员

let possiblePlant = Plant(rawValue: 7)
        //使用 rawValue 返回一个可选的枚举值

println(possiblePlant)


//_______________________________________________________________________________________________

let positionToFind = 9

if let somePlant = Plant(rawValue: positionToFind){       //当使用 rawValue 方法无法找到特定的原始值的枚举成员的时候,返回 nil

    switch somePlant{

    case .Earth:

        println("Mostly harmless")

    default:

        println("Not a safe place for humans")

    }

}

else{

    println("There isn't a plant at position \(positionToFind)")

}


转载:http://blog.csdn.net/u013096857/article/details/37871473