Swift学习笔记八:枚举

1. 枚举语法
     1)枚举的定义

      使用enum关键词而且把它们的整个定义放在一对大括号内:

enum SomeEumeration {      // enumeration definition goes here  }  
  以下来看看详细样例:
enum CompassPoint {
    case North
    case South
    case East
    case West
}

     注意:
          ①不像C和Objective-C一样,Swift的枚举成员在被创建时不会被赋予一个默认的整数值。在上面的CompassPoints样例中,North。South,East和West并非等于0,1。2和3
          ②良好的书写习惯是,每一个枚举变量均以大写开头,而且枚举的名字不要使用复数形式

     上面的样例或者也能够这样写:
                    enum CompassPoint { case North, South, East, West }
          将全部成员放在一个case中。并用逗号隔开
        
     2)枚举类型的使用
          枚举类型使用时和使用类的属性一样。
                    var a = CompassPoint.North
     
     3)省略枚举类型
          当a的类型被判断为CompassPoint的一个可能值时。你能够使用更短的点(.)语法将其设置为还有一个CompassPoint的值,省略枚举类型:

var a = CompassPoint.North
a = .South

2.匹配枚举值和Switch语句

switch a {
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")
}

          重点:
               ①当枚举值和switch语句连用时,也能够省略枚举类型
               ②使用switch时,必须考虑到全部的枚举对象,否则编译器会报错

3. 实例值
     枚举类型能够定义实例值。在使用的时候再给实例赋详细的值

enum test{
    case name(String)
    case count(Int,Int)
}   //枚举定义的是多种不同类型
var a = test.name("小笨狼")    //枚举类型中详细值能够在使用时才赋值
switch a{
case .name(let nameString):     //定义nameString来存放枚举的值,这里是"小笨狼"
    println(nameString)
case let .count(count1,count2): //假设有多个值。能够将let或者var放在括号外面一起定义
    println(count1+count2)
}
          重点:
               ①枚举值能够是不同类型的,不论什么类型的值
               ②枚举定义时不一定要赋值,能够在使用时再赋值
               ③在switch中使用时。须要再定义变量来存放枚举值

4.原始值
          1)原始值定义
                    原始值就和C语言中的枚举差点儿相同
enum test:Int{
    case first = 1
    case second,third
}

          重点:
               ①在定义的时候申明原始值类型,这里是Int类型。

原始值类型能够是字符串。字符,或者不论什么整型值或浮点型值
               ②每一个原始值在它的枚举声明中必须是唯一的。
               ③当整型值被用于原始值。假设其它枚举成员没有值时。它们会自己主动递增。

这里second=2,third=3
          2)原始值的使用
               使用枚举成员的toRaw方法能够訪问该枚举成员的原始值:
                    let a = test.second.toRaw()     //a=2 Int类型
                使用枚举的fromRaw方法能够找到具有特定原始值的枚举成员
          let b = test.fromRaw(2)     //b = test.second

5.函数
          枚举中还能够使用函数

enum test:Int{
    case first = 1
    case second,third
    func descript() -> String{
        switch self{
        case .first:
            return  "first"
        case .second:
            return "second"
        case .third:
            return "third"
        }
    }
}
if let c = test.fromRaw(2) {
    println(c.descript())      //输出second
}
打印c.descript()输出second,可是假设c不在if中定义,编译器会报错,找不到descript的成员变量,这个问题我还没弄清楚为什么










posted @ 2016-02-24 17:49  blfshiye  阅读(193)  评论(0编辑  收藏  举报