天天看點

15.Swift學習之枚舉

枚舉介紹

  • 概念介紹
    • 枚舉定義了一個通用類型的一組相關的值,可以在代碼中以一個安全的方式來使用這些值
    • Swift中的枚舉是一等類型, 它可以像類和結構體一樣增加

      屬性和方法

    • 在 C/OC 語言中枚舉指定相關名稱為一組整型值,而Swift 中的枚舉更加靈活
      • 不必給每一個枚舉成員提供一個值
      • Swift 中的枚舉可以提供的值類型有:字元串,字元,整型值,浮點值等
  • 枚舉類型的文法
    • 使用

      enum

      關鍵詞并且把它們的整個定義放在一對大括号内
enum SomeEnumeration {
// enumeration definition goes here
}
           
enum Method{
    case Add
    case Sub
    case Mul
    case Div
}
let selectMethod = Method.Sub
switch (selectMethod){
    case Method.Add:
        print("加法")
    case Method.Sub:
        print("減法")
    case Method.Mul:
        print("除法")
    case Method.Div:
        print("乘法")
    default:
        print("都不是")
}
           

枚舉的定義

  • 定義方式一
    • case

      關鍵詞表明新的一行成員值将被定義
    • 不像 C 和 Objective-C 一樣,

      Swift 的枚舉成員在被建立時不會被賦予一個預設的整數值

    • 下面的例子中,North,South,East和West不是隐式的等于0,1,2和3
enum CompassPoint {
  case North
  case South
  case East
  case West
}
           
  • 定義方式二:多個成員值可以出現在同一行上
enum CompassPoint {
  case North, South, East,West
}
           

枚舉指派

  • 枚舉類型指派可以是字元串/字元/整型/浮點型
    • 如果有給枚舉類型指派,則必須在枚舉類型後面明确說明具體的類型

enum CompassPoint : Int {
  case North = 1
  case South = 2
  case East = 3
  case West = 4
}

enum CompassPoint : Double {
  case North = 1.0
  case South = 2.0
  case East = 3.0
  case West = 4.0
}

enum CompassPoint : String {
  case North = "North"
  case South = "South"
  case East = "East"
  case West = "West"
}
           

枚舉類型推斷

  • 前面的例子中,在使用枚舉的時候,是通過

    枚舉.值

    的形式來通路的,其實由于Swift的類型推斷非常強大,如果枚舉類型确定了,在通路值的時候可以用

    .值

    的形式來通路
enum Method {
    case Add  
    case Sub   
    case Mul    
    case Div
    func method(){     
    }
}
//已經明确a是一個Method類型 後面通路可以簡寫
let a:Method = .Add
let selectMethod = Method.Sub
switch (selectMethod){
    case .Add:
        print("加法")
    case .Sub:
        print("減法")
    case .Mul:
        print("除法")
    case .Div:
        print("乘法")
    default:
        print("都不是")
}
           

枚舉的原始值

  • C/OC中枚舉的本質就是整數,是以C/OC中的枚舉是有原始值的,預設是從0開始,而Swift中的枚舉預設是沒有原始值的, 但是可以在定義時告訴系統讓枚舉有原始值
  • 注意:
    • 原始值區分大小寫
    • 通過

      rawValue

      可以擷取原始值
    • rawValue

      傳回的枚舉是一個可選型,因為原始值對應的枚舉值不一定存在
    • 如果想指定第一個元素的原始值之後,後面的元素的原始值能夠預設+1 , 枚舉一定是 Int 類型
enum Planet:Int {
    case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
let planet:Planet = .Mars
//列印4
print(planet.rawValue)
//p是一個可選型
let p = Planet(rawValue: 3)
if let p = p {
    switch p {
    case .Mercury:
        print("Mercury")
    case .Venus:
        print("Venus")
    case .Earth:
        print("Earth")
    case .Mars:
        print("Mars")
    case .Jupiter:
        print("Jupiter")
    case .Saturn:
        print("Saturn")
    case .Uranus:
        print("Uranus")
    case .Neptune:
        print("Neptune")
    }
}
           

繼續閱讀