溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

24.swift枚舉

發(fā)布時(shí)間:2020-06-20 21:53:34 來(lái)源:網(wǎng)絡(luò) 閱讀:500 作者:光光ing 欄目:移動(dòng)開(kāi)發(fā)

import Foundation

/*

Swift枚舉:

Swift中的枚舉比OC中的枚舉強(qiáng)大, 因?yàn)?span >Swift中的枚舉是一等類(lèi)型, 它可以像類(lèi)和結(jié)構(gòu)體一樣增加屬性和方法

格式:

enum Method{

    case 枚舉值

}

*/


enum Method{

//    case Add

//    case Sub

//    case Mul

//    case Div

    // 可以連在一起寫(xiě)

    case Add, Sub, Mul, Div

}

// 可以使用枚舉類(lèi)型變量或常量接收枚舉值

var m: Method = .Add

// 注意: 如果變量或常量沒(méi)有指定類(lèi)型, 那么前面必須加上該值屬于哪個(gè)枚舉類(lèi)型

var m1 = Method.Add



// 利用Switch匹配

// 注意: 如果case中包含了所有的值, 可以不寫(xiě)default. 如果case中沒(méi)有包含枚舉中所有的值, 必須寫(xiě)default

switch (Method.Add){

    case Method.Add:

        print("加法")

    case Method.Sub:

        print("減法")

    case Method.Mul:

        print("除法")

    case Method.Div:

        print("乘法")

//    default:

//        print("都不是")

}


/*

原始值:

 OC中枚舉的本質(zhì)就是整數(shù),所以OC中的枚舉是有原始值的,默認(rèn)是從0開(kāi)始

Swift中的枚舉默認(rèn)是沒(méi)有原始值的, 但是可以在定義時(shí)告訴系統(tǒng)讓枚舉有原始值

enum Method: 枚舉值原始值類(lèi)型{

    case 枚舉值

}

*/


enum Method2: Int{

    // 可以連在一起寫(xiě)

    case Add, Sub, Mul, Div

}

// OC中的枚舉一樣, 也可以指定原始值, 后面的值默認(rèn)+1

enum Method3: Int{

    case Add = 5, Sub, Mul, Div

}


// Swift中的枚舉除了可以指定×××以外還可以指定其它類(lèi)型, 但是如果指定其它類(lèi)型, 必須給所有枚舉值賦值, 因?yàn)椴荒茏詣?dòng)遞增

enum Method4: Double{

    // 可以連在一起寫(xiě)

    case Add = 5.0, Sub = 6.0, Mul = 6.1, Div = 8.0

}

// rawValue代表將枚舉值轉(zhuǎn)換為原始值, 注意老版本中轉(zhuǎn)換為原始值的方法名叫toRaw

print(Method4.Sub.rawValue)



// 原始值轉(zhuǎn)換為枚舉值

enum Method5: String{

    case Add = "add", Sub = "sub", Mul = "mul", Div = "div"

}


// 通過(guò)原始值創(chuàng)建枚舉值

/*

注意

1.原始值區(qū)分大小寫(xiě)

2.返回的是一個(gè)可選值,因?yàn)樵贾祵?duì)應(yīng)的枚舉值不一定存在

3.老版本中為fromRaw("add")

*/

let m2 = Method5(rawValue: "add")

print(m2)


//func chooseMethod(op:Method2)

    func chooseMethod(op:String)

{

    // 由于返回是可選類(lèi)型, 所以有可能為nil, 最好使用可選綁定

    if let opE = Method5(rawValue: op){

        switch (opE){

        case .Add:

            print("加法")

        case .Sub:

            print("減法")

        case .Mul:

            print("除法")

        case .Div:

            print("乘法")

        }

    }

}



/*

枚舉相關(guān)值:

可以讓枚舉值對(duì)應(yīng)的原始值不是唯一的, 而是一個(gè)變量.

每一個(gè)枚舉可以是在某種模式下的一些特定值

*/

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)

// 利用switch提取枚舉關(guān)聯(lián)值

/*

switch lsd

{

    case .StartAndEndPattern(let s, let e):

        print("start = \(s) end = \(e)")

    case .StartAndLengthPattern(let s, let l):

        print("start = \(s) lenght = \(l)")

}

*/


// 提取關(guān)聯(lián)值優(yōu)化寫(xiě)法

switch lsd

{

        case let .StartAndEndPattern(s, e):

            print("start = \(s) end = \(e)")

        case .StartAndLengthPattern(let s, let l):

            print("start = \(s) lenght = \(l)")

}


向AI問(wèn)一下細(xì)節(jié)
推薦閱讀:
  1. 枚舉
  2. 枚舉排列

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI