美文网首页
DAY4:Enumerations

DAY4:Enumerations

作者: SheBang_ | 来源:发表于2015-12-05 23:48 被阅读14次

    今天用到的Markdown语法:

    Ordered Lists

    Ordered lists are created using "1." + Space:
    

    swift中枚举类型是一等类型,具有很多传统上只能被类所支持的特性:

    1. 计算型属性,用于提供枚举值的附加信息
    2. 实例方法,用于提供和枚举值相关联的功能
    3. 定义构造函数,来提供初始值
    4. 遵守协议

    我的理解:枚举值就可以当作类。

    定义了一个枚举类型,用case来定义一个枚举成员值

    enum CompassPoint {
        case North
        case South
        case East
        case West
    }
    

    当directionToHead被赋值的时候,他的类型就被推断出来,是枚举类型,下面使用的时候就可以用.South直接赋值

    var directionToHead = CompassPoint.West
    directionToHead = .South
    

    用switch判断枚举值的时候,switch必须穷举所有的情况,不然编译会报错

    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")
        }
    

    我们列举枚举值的时候,可以使用如下,将所有的选项写在一行中

    enum Planet{
        case  Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune
    }
    let somePlanet = Planet.Mars
    switch somePlanet{
    //当我们不需要列出所有选项的时候,我们可以使用default选项
    case .Earth:
        print("Mostly harmless")
    default:
        print("hahah,woxihuanni!")
    }
    

    关联值(Associated Values):

    //定义了一个Barcode的枚举类型,成员值有两个,一个是枚举成员是UPCA,还有一个枚举成员是QRCode,关联值是枚举成员中的关联出来的值
    
    enum Barcode{
        case UPCA(Int,Int,Int,Int)  
        case QRCode(String)
    }
    var productBarcode = Barcode.UPCA(8, 7, 5, 6)
    productBarcode = .QRCode("wocalei")
    

    枚举值同时只能存储这两个关联值中的一个,最后被赋值的会覆盖前面的值
    可以用一个switch的语句来做判断,这时候可以给每个关联值做一个变量的定义,下面就可以使用这个变量了

    switch productBarcode{
    case .UPCA(let wo,let da,let ge,let nihao):
        print("\\(wo),\\(da),\\(ge),\\(nihao)")
    case .QRCode(var hah):
        print("\\(hah)")
    }
    

    也可以吧let(var)移到最前面,写成这样:

    //case let .UPCA(wo,da,ge,nihao)
    

    原始值(Raw Values):

    作为关联值的替代,枚举成员可以使用原始值(默认值)预填充,这些原始值的类型必须要相同的类型

    enum ACSIIControl:Character{
        case Tab = "\\t"
        case LineFeed = "\\n"//换行
        case CarriageReturn = "\\r"//回车
    }
    

    原始值可以是字符串,字符,活着任何整型或者浮点类型,每个原始值在枚举声明中必须是唯一的,当整型值被用于原始值,如果其他值没有被赋值,她们会自动递增

    enum Planet: Int {
       case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
    }
    let earthOrader = Planet.Earth.rawValue  //earthOrader值为3
    let possiblePlant = Planet(rawValue: 7)
    

    因为不是所有的Int值都可以找到匹配的行星,这是一个构造函数,可以反回一个可选的枚举成员,所以possiblePlant是Planet?(可选的Planet),当有值的时候反回可选值,没有就反回nil

    let positionTofind = 9
    if let somePlanet = Planet(rawValue: 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)")
    }
    

    上面这个例子通过原始值来获得一个可选的行星,如果有值救火进入if 判断,如果没有就会进入else分支,显然上面是没有的,打出There isn't a planet at position 9

    相关文章

      网友评论

          本文标题:DAY4:Enumerations

          本文链接:https://www.haomeiwen.com/subject/zzashttx.html