Swift 枚舉
枚舉簡(jiǎn)單的說也是一種數(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)的功能。
語(yǔ)法
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è)縮寫語(yǔ)法(.)將其設(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("W3CSchool") 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é)生的成績(jī)是: \(Mark1),\(Mark2),\(Mark3)。") }
以上程序執(zhí)行輸出結(jié)果為:
學(xué)生的成績(jī)是: 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。
更多建議: