swift學(xué)習(xí)之枚舉

相比OC的枚舉類型,swift的枚舉類型就方便的多,OC的枚舉類型成員屬性只能是整數(shù)NSInterger(C語(yǔ)言的枚舉就是一對(duì)整形常量的集合),而swift沒有這樣限制,更不會(huì)像OC那樣隱式給成員賦值整數(shù),在不指定類型的情況下,swift的枚舉成員本身就是值

普通枚舉

定義格式

enum 枚舉類型名稱:(可有可無(wú)的成員類型)
{
    case 枚舉成員1
    case 枚舉成員2
    ...
    case 枚舉成員n
}

enum 枚舉類型名稱
{
    case 枚舉成員1,枚舉成員2,...,枚舉成員n
}
//用戶身份類型
enum UserIdentityType
{
    case UserIdentityTypeNone
    case UserIdentityTypeNormal
    case UserIdentityTypeCourier
    case UserIdentityTypeSeller
}

var userType:UserIdentityType = .UserIdentityTypeCourier

原始值(成員是常量)

raw value
其實(shí)就是枚舉類型規(guī)定成員類型
定義格式:

enum 枚舉類型名稱:成員類型
{
    case 枚舉成員1=1
    case 枚舉成員2=2
    ...
    case 枚舉成員n=n
}
上邊的成員的值不用是連續(xù)的
這樣的定義就會(huì)給枚舉類型提供一個(gè)新的構(gòu)造方法
枚舉類型名稱(rowValue:輸入值)

enum NetworkError:String 
{
    case NetworkErroLogic = "這是一個(gè)邏輯錯(cuò)誤,網(wǎng)絡(luò)請(qǐng)求成功"
    case NetworkErrorRequest = "這是一個(gè)網(wǎng)絡(luò)請(qǐng)求錯(cuò)誤"
}

let networkError:NetworkError = .NetworkErrorRequest

print(networkError)

print(networkError.rawValue)

帶有關(guān)聯(lián)值的枚舉(成員是可以關(guān)聯(lián)多個(gè)值,可以認(rèn)為是關(guān)聯(lián)一個(gè)元組,關(guān)聯(lián)值枚舉不能申明為rawValue,這個(gè)家伙的成員是一個(gè)常量,一經(jīng)定義不能再變的,關(guān)聯(lián)枚舉的關(guān)聯(lián)值是可變的,決定著他本身是可變的)

帶有關(guān)聯(lián)值的枚舉的成員都會(huì)帶有額外的信息
定義格式

enum 枚舉類型名稱
{
    case 枚舉成員1(關(guān)聯(lián)值1)
    case 枚舉成員2(關(guān)聯(lián)值2)
    ...
    case 枚舉成員n(關(guān)聯(lián)值3)
}

//alamofire事例
public enum Result<Value, Error: ErrorType> {
    case Success(Value)
    case Failure(Error)

    /// Returns `true` if the result is a success, `false` otherwise.
    public var isSuccess: Bool {
        switch self {
        case .Success:
            return true
        case .Failure:
            return false
        }
    }

    /// Returns `true` if the result is a failure, `false` otherwise.
    public var isFailure: Bool {
        return !isSuccess
    }

    /// Returns the associated value if the result is a success, `nil` otherwise.
    public var value: Value? {
        switch self {
        case .Success(let value):
            return value
        case .Failure:
            return nil
        }
    }

    /// Returns the associated error value if the result is a failure, `nil` otherwise.
    public var error: Error? {
        switch self {
        case .Success:
            return nil
        case .Failure(let error):
            return error
        }
    }
}

枚舉結(jié)合范型

定義格式

enum 枚舉類型名稱<T1,T2...,Tn>
{
    case 枚舉成員1(T1類型關(guān)聯(lián)值1)
    case 枚舉成員2(T2類型關(guān)聯(lián)值2)
    ...
    case 枚舉成員n(Tn類型關(guān)聯(lián)值3)
}

關(guān)聯(lián)值提取

在switch語(yǔ)法的case中要使用關(guān)聯(lián)值就必須將關(guān)聯(lián)值提取出來(lái)作為switch語(yǔ)句的一部分??梢栽趕witch的 case 分支代碼中提取每個(gè)關(guān)聯(lián)值作為一個(gè)常量(用let前綴)或者作為一個(gè)變量(用var前綴)來(lái)使用,多個(gè)關(guān)聯(lián)值之間用逗號(hào)隔開。如果有多個(gè)關(guān)聯(lián)值都作為常量或者都作為變量提取,通常將let或者var提到case關(guān)鍵字后面。

enum Trades {
    case Buy(stock: String, amount: Int, stockPrice: Float)
    case Sell(stock: String, amount: Int, stockPrice: Float)
}

let trade = Trades.Buy(stock: "100", amount: 20, stockPrice: 10.0)

switch trade {
//case .Buy(let stock,let amount,let stockPrice):
case let .Buy(stock,amount,stockPrice):
    print("\(stock)" + "," + "\(amount)" + "," + "\(stockPrice)");
default:
    print("sdfds");
}

枚舉遞歸

indirect enum NetWorkResult {
case Success(Int)
case failure(String)
case Result(NetWorkResult)
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容