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

相比OC的枚舉類型巩螃,swift的枚舉類型就方便的多,OC的枚舉類型成員屬性只能是整數(shù)NSInterger(C語(yǔ)言的枚舉就是一對(duì)整形常量的集合),而swift沒(méi)有這樣限制掠手,更不會(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ǔ)句的一部分〖吒可以在switch的 case 分支代碼中提取每個(gè)關(guān)聯(lián)值作為一個(gè)常量(用let前綴)或者作為一個(gè)變量(用var前綴)來(lái)使用和媳,多個(gè)關(guān)聯(lián)值之間用逗號(hào)隔開(kāi)。如果有多個(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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市骚秦,隨后出現(xiàn)的幾起案子她倘,更是在濱河造成了極大的恐慌,老刑警劉巖作箍,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硬梁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胞得,警方通過(guò)查閱死者的電腦和手機(jī)靶溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)懒震,“玉大人罩息,你說(shuō)我怎么就攤上這事「鋈牛” “怎么了瓷炮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)递宅。 經(jīng)常有香客問(wèn)我娘香,道長(zhǎng),這世上最難降的妖魔是什么办龄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任烘绽,我火速辦了婚禮,結(jié)果婚禮上俐填,老公的妹妹穿的比我還像新娘安接。我一直安慰自己,他們只是感情好英融,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布盏檐。 她就那樣靜靜地躺著歇式,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胡野。 梳的紋絲不亂的頭發(fā)上材失,一...
    開(kāi)封第一講書(shū)人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音硫豆,去河邊找鬼龙巨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛熊响,可吹牛的內(nèi)容都是我干的恭应。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼耘眨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了境肾?” 一聲冷哼從身側(cè)響起剔难,我...
    開(kāi)封第一講書(shū)人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奥喻,沒(méi)想到半個(gè)月后偶宫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡环鲤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年纯趋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冷离。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吵冒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出西剥,到底是詐尸還是另有隱情痹栖,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布瞭空,位于F島的核電站揪阿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏咆畏。R本人自食惡果不足惜南捂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旧找。 院中可真熱鬧溺健,春花似錦、人聲如沸钮蛛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至缚去,卻和暖如春潮秘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背易结。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工枕荞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搞动。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓躏精,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鹦肿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子矗烛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容