Swift基礎文法-枚舉,枚舉原始值,枚舉相關值,switch提取枚舉關聯值

來源:互聯網
上載者:User
1. Swift枚舉基本概念 Swift中的枚舉比OC中的枚舉強大, 因為Swift中的枚舉是一等類型,

它可以像類和結構體一樣增加屬性和方法

格式:

enum Method{        case 枚舉值}
enum Method{    case Add    case Sub    case Mul    case Div}
2. 枚舉的基本使用 可以枚舉值可以連著寫, 但是要以逗號,分隔
enum Menthod1 {    case Add, Sub, Mul, Div}
可以使用枚舉類型變數或常量接收枚舉值
var m: Method = .Add
注意: 如果變數或常量沒有指定類型, 那麼前面必須加上該值屬於哪個枚舉類型
// var m1 =  .Add //直接報錯var m1 = Method.Add //正確寫法
利用Switch匹配
注意: 如果case中包含了所有的值, 可以不寫default. 如果case中沒有包含枚舉中所有的值, 必須寫default
//注意: 如果case中包含了所有的值, 可以不寫default.//如果case中沒有包含枚舉中所有的值, 必須寫defaultswitch (Method.Add){case Method.Add:    print("加法")case Method.Sub:    print("減法")case Method.Mul:    print("除法")case Method.Div:    print("乘法")default:    print("都不是")}
3. 原始值 OC中枚舉的本質就是整數, 所以OC中的枚舉是有原始值的,預設是從0開始 而Swift中的枚舉預設是沒有原始值的, 但是可以在定義時告訴系統讓枚舉有原始值 和OC中的枚舉一樣, 也可以指定原始值, 後面的值預設+1 , 但必須指定枚舉的類型, 並且一定是 Int 類型 Swift中的枚舉除了可以指定整形以外還可以指定其它類型, 但是如果指定其它類型, 必須給所有枚舉值賦值, 因為不能自動遞增
// 指定了枚舉原始實值型別為 Int , 所以並且給第一個枚舉值定義了原始值, 則後面的值預設 +1enum Method3: Int{    case Add = 5, Sub, Mul, Div}
// 自定的枚舉原始值的類型不是 Int , 所以後面的值不會預設 +1, // 後面的也需要手動賦值enum Method4: Double{    case Add = 5.0, Sub = 6.0, Mul = 6.1, Div = 8.0}
原始值轉換為枚舉值
enum Method5: String{        case Add = "add", Sub = "sub", Mul = "mul", Div = "div"}
擷取枚舉原始值
rawValue代表將枚舉值轉換為原始值, 注意老版本中轉換為原始值的方法名叫toRaw
Method4.Sub.rawValueprint(Method4.Sub.rawValue)// 輸出結果: 6.0
通過原始值建立枚舉值
原始值區分大小寫 返回的是一個可選值,因為原始值對應的枚舉值不一定存在 老版本中為fromRaw(“add”)
let m2 = Method5(rawValue: "add")print(m2)func chooseMethod(op:String){    // 由於返回是可選類型, 所以有可能為nil, 最好使用可選綁定    if let opE = Method5(rawValue: op){        switch (opE){        case .Add:            print("加法")        case .Sub:            print("減法")        case .Mul:            print("除法")        case .Div:            print("乘法")        }    }}
4. 枚舉相關值 可以讓枚舉值對應的原始值不是唯一的, 而是一個變數. 每一個枚舉可以是在某種模式下的一些特定值
enum lineSegmentDescriptor{    case StartAndEndPattern(start:Double, end:Double)    case StartAndLengthPattern(start: Double, length:Double)}var lsd = lineSegmentDescriptor.StartAndLengthPattern(start: 0.0, length: 100.0)lsd = lineSegmentDescriptor.StartAndEndPattern(start: 0.0, end: 50.0)print(lsd)// 輸出結果: StartAndEndPattern(0.0, 50.0)
利用switch提取枚舉關聯值
switch lsd {case let .StartAndEndPattern(s, e):    print("start = \(s) end = \(e)")case .StartAndLengthPattern(let s, let l):    print("start = \(s) lenght = \(l)")}// 輸出結果: start = 0.0 end = 50.0
相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.