Swift 枚舉

枚舉簡單的說也是一種數(shù)據(jù)類型,只不過是這種數(shù)據(jù)類型只包含自定義的特定數(shù)據(jù),它是一組有共同特性的數(shù)據(jù)的集合。

Swift 的枚舉類似于 Objective C 和 C 的結(jié)構(gòu),枚舉的功能為:

它聲明在類中,可以通過實(shí)例化類來訪問它的值。

枚舉也可以定義構(gòu)造函數(shù)(initializers)來提供一個(gè)初始成員值;可以在原始的實(shí)現(xiàn)基礎(chǔ)上擴(kuò)展它們的功能。

可以遵守協(xié)議(protocols)來提供標(biāo)準(zhǔn)的功能。

語法

Swift 中使用 enum 關(guān)鍵詞來創(chuàng)建枚舉并且把它們的整個(gè)定義放在一對(duì)大括號(hào)內(nèi):

enum enumname {

// 枚舉定義放在這里

}

例如我們定義以下表示星期的枚舉:

import Cocoa

// 定義枚舉

enum DaysofaWeek {

case Sunday

case Monday

case TUESDAY

case WEDNESDAY

case THURSDAY

case FRIDAY

case Saturday

}

var weekDay = DaysofaWeek.THURSDAY

weekDay = .THURSDAY

switch weekDay

{

case .Sunday:

print("星期天")

case .Monday:

print("星期一")

case .TUESDAY:

print("星期二")

case .WEDNESDAY:

print("星期三")

case .THURSDAY:

print("星期四")

case .FRIDAY:

print("星期五")

case .Saturday:

print("星期六")

}

以上程序執(zhí)行輸出結(jié)果為:

星期四

枚舉中定義的值(如 Sunday,Monday,……和Saturday)是這個(gè)枚舉的成員值(或成員)。case關(guān)鍵詞表示一行新的成員值將被定義。

注意: 和 C 和 Objective-C 不同,Swift 的枚舉成員在被創(chuàng)建時(shí)不會(huì)被賦予一個(gè)默認(rèn)的整型值。在上面的DaysofaWeek例子中,Sunday,Monday,……和Saturday不會(huì)隱式地賦值為0,1,……和6。相反,這些枚舉成員本身就有完備的值,這些值是已經(jīng)明確定義好的DaysofaWeek類型。

var weekDay = DaysofaWeek.THURSDAY

weekDay的類型可以在它被DaysofaWeek的一個(gè)可能值初始化時(shí)推斷出來。一旦weekDay被聲明為一個(gè)DaysofaWeek,你可以使用一個(gè)縮寫語法(.)將其設(shè)置為另一個(gè)DaysofaWeek的值:

var weekDay = .THURSDAY

當(dāng)weekDay的類型已知時(shí),再次為其賦值可以省略枚舉名。使用顯式類型的枚舉值可以讓代碼具有更好的可讀性。

枚舉可分為相關(guān)值與原始值。

相關(guān)值與原始值的區(qū)別

相關(guān)值 原始值

不同數(shù)據(jù)類型 相同數(shù)據(jù)類型

實(shí)例: enum {10,0.8,"Hello"} 實(shí)例: enum {10,35,50}

值的創(chuàng)建基于常量或變量 預(yù)先填充的值

相關(guān)值是當(dāng)你在創(chuàng)建一個(gè)基于枚舉成員的新常量或變量時(shí)才會(huì)被設(shè)置,并且每次當(dāng)你這么做得時(shí)候,它的值可以是不同的。 原始值始終是相同的

相關(guān)值

以下實(shí)例中我們定義一個(gè)名為 Student 的枚舉類型,它可以是 Name 的一個(gè)相關(guān)值(Int,Int,Int,Int),或者是 Mark 的一個(gè)字符串類型(String)相關(guān)值。

import Cocoa

enum Student{

case Name(String)

case Mark(Int,Int,Int)

}

var studDetails = Student.Name("Runoob")

var studMarks = Student.Mark(98,97,95)

switch studMarks {

case .Name(let studName):

print("學(xué)生的名字是: \(studName)。")

case .Mark(let Mark1, let Mark2, let Mark3):

print("學(xué)生的成績是: \(Mark1),\(Mark2),\(Mark3)。")

}

以上程序執(zhí)行輸出結(jié)果為:

學(xué)生的成績是: 98,97,95。

原始值

原始值可以是字符串,字符,或者任何整型值或浮點(diǎn)型值。每個(gè)原始值在它的枚舉聲明中必須是唯一的。

在原始值為整數(shù)的枚舉時(shí),不需要顯式的為每一個(gè)成員賦值,Swift會(huì)自動(dòng)為你賦值。

例如,當(dāng)使用整數(shù)作為原始值時(shí),隱式賦值的值依次遞增1。如果第一個(gè)值沒有被賦初值,將會(huì)被自動(dòng)置為0。

import Cocoa

enum Month: Int {

case January = 1, February, March, April, May, June, July, August, September, October, November, December

}

let yearMonth = Month.May.rawValue

print("數(shù)字月份為: \(yearMonth)。")

以上程序執(zhí)行輸出結(jié)果為:

數(shù)字月份為: 5。

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • title: "Swift 中枚舉高級(jí)用法及實(shí)踐"date: 2015-11-20tags: [APPVENTUR...
    guoshengboy閱讀 2,689評(píng)論 0 2
  • Swift中不僅提供了 面向過程的編程支持,也提供了全面的面向?qū)ο蟮闹С?,與普通的面向?qū)ο蟮木幊陶Z言(只支持類)不...
    隨夢(mèng)而飛飛閱讀 5,272評(píng)論 3 4
  • 枚舉為一組相關(guān)的值定義了一個(gè)共同的類型,使得可以在代碼中以類型安全的方式來使用這些值。 如果熟悉 C 語言,會(huì)知道...
    窮人家的孩紙閱讀 900評(píng)論 1 4
  • 枚舉是為一組相關(guān)的值定義了一個(gè)共同的類型,使得在代碼中以類型安全的方式來使用。 一、枚舉語法 枚舉簡單使用: 與C...
    EndEvent閱讀 423評(píng)論 1 1
  • 久經(jīng)桑拿日,難得一清天。 空氣不濕熱,惠風(fēng)暢暢然。 野貓踱小步,雜花舞翩翩。 本欲散心去,奈何無人伴。 一個(gè)要約會(huì)...
    小小在此閱讀 281評(píng)論 0 2

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