Swift枚舉

枚舉簡單認識

  • Swift中的枚舉比OC中的枚舉強大, 因為Swift中的枚舉是一等類型, 它可以像類和結構體一樣增加屬性和方法房待。

語法

enum 枚舉名{
    case
    case
    case
    ...
}

舉例:

//多個case分開寫
enum CompassPoint {
    case north
    case south
    case east
    case west
}

//多個case寫在同一行梭灿,使用逗號分開
enum Planet {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

//創(chuàng)建CompassPoint的枚舉實例
var directionToHead = CompassPoint.west
directionToHead = .east

//也可以寫成
//var directionToHead:CompassPoint = .west

注意:與C和Objective-C不同佛纫,Swift枚舉在創(chuàng)建時默認不分配整數(shù)值脑漫。在CompassPoint例子中街望,未指明CompassPoint成員的類型扮休,north锣枝,south厢拭,east和west不等于隱式0,1撇叁,2和3供鸠。
如果給north指定原始整數(shù)值,后面的值默認+1:

enum CompassPoint {
     case north = 5, south, east, west
}

枚舉與Switch結合

  • 通常將單個枚舉值與switch語句匹配
//switch覆蓋了CompassPoint的所有情況陨闹,則可省略default
directionToHead = .south
switch directionToHead {
case .north:
    print("Lots of planets have a north")
case .south:
    print("Watch out for penguins")
case .east:
    print("Where the sun rises")
case .west:
    print("Where the skies are blue")
}

//switch沒有覆蓋Planet的所有情況楞捂,需要添加default
let somePlanet = Planet.earth
switch somePlanet {
case .earth:
    print("Mostly harmless")
default:
    print("Not a safe place for humans")
}

關聯(lián)值(Associated Values)

定義Swift枚舉來存儲任何給定類型的關聯(lián)值,而且每種枚舉情況的值類型可以不同

enum Barcode {
    case upc(Int, Int, Int, Int)
    case qrCode(String)
}
//創(chuàng)建Barcode枚舉實例
var productBarcode = Barcode.upc(8, 85909, 51226, 3)
productBarcode = .qrCode("ABCDEFGHIJKLMNOP")

可以將關聯(lián)值提取為switch語句的一部分趋厉。將每個關聯(lián)值提取為常量(let)或變量(var)寨闹,以便在switch中處理:

switch productBarcode {
case .upc(let numberSystem, let manufacturer, let product, let check):
    print("UPC: \(numberSystem), \(manufacturer), \(product), \(check).")
case .qrCode(let productCode):
    print("QR code: \(productCode).")
}
// Prints "QR code: ABCDEFGHIJKLMNOP."

如果枚舉case的所有關聯(lián)值都被提取為常量,或者都被提取為變量君账,則可以將var或let放置在case名稱前面繁堡,來提取所有的關聯(lián)值:

switch productBarcode {
case let .upc(numberSystem, manufacturer, product, check):
    print("UPC : \(numberSystem), \(manufacturer), \(product), \(check).")
case let .qrCode(productCode):
    print("QR code: \(productCode).")
}
// Prints "QR code: ABCDEFGHIJKLMNOP."

原始值(Raw Values)

  • 隱式分配原始值
    當使用存儲整數(shù)或字符串原始值的枚舉時,不必為每種case顯式分配原始值乡数,Swift將自動為其分配值椭蹄。如果使用整數(shù)為原始值,則每個case的原始值依次自增1净赴。若第一個case沒有設置原始值绳矩,則默認為0:
enum Planet: Int {    //【Int表示原始值類型】
    case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
}

當使用字符串作為原始值類型時,每個case的原始值是該case的名稱玖翅。

enum CompassPoint: String {
    case north, south, east, west
}

發(fā)現(xiàn)去掉String原始值類型翼馆,每個case的原始值也是該case的名稱

  • 使用rawValue將枚舉值轉換為原始值:
let earthsOrder = Planet.earth.rawValue
// earthsOrder is 3
let sunsetDirection = CompassPoint.west.rawValue
// sunsetDirection is "west"
  • 原始值初始化枚舉實例:
let directionToHead = CompassPoint(rawValue: "north")!

注意點:1.原始值區(qū)分大小寫。2.返回的是一個可選值,因為原始值對應的枚舉值不一定存在金度。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末应媚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猜极,更是在濱河造成了極大的恐慌珍特,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魔吐,死亡現(xiàn)場離奇詭異扎筒,居然都是意外死亡,警方通過查閱死者的電腦和手機酬姆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門嗜桌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辞色,你說我怎么就攤上這事骨宠。” “怎么了相满?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵层亿,是天一觀的道長。 經(jīng)常有香客問我立美,道長匿又,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任建蹄,我火速辦了婚禮碌更,結果婚禮上,老公的妹妹穿的比我還像新娘洞慎。我一直安慰自己痛单,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布劲腿。 她就那樣靜靜地躺著旭绒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焦人。 梳的紋絲不亂的頭發(fā)上挥吵,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音垃瞧,去河邊找鬼蔫劣。 笑死,一個胖子當著我的面吹牛个从,可吹牛的內(nèi)容都是我干的脉幢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼嗦锐,長吁一口氣:“原來是場噩夢啊……” “哼嫌松!你這毒婦竟也來了刚操?” 一聲冷哼從身側響起韭邓,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤妙色,失蹤者是張志新(化名)和其女友劉穎齐唆,沒想到半個月后觉鼻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡疮绷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年卿堂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片髓废。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡巷懈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慌洪,到底是詐尸還是另有隱情顶燕,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布冈爹,位于F島的核電站涌攻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏频伤。R本人自食惡果不足惜恳谎,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剂买。 院中可真熱鬧惠爽,春花似錦、人聲如沸瞬哼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坐慰。三九已至较性,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間结胀,已是汗流浹背赞咙。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糟港,地道東北人攀操。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像秸抚,于是被迫代替她去往敵國和親速和。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345