原創(chuàng)文章早抠,歡迎轉(zhuǎn)載谣拣。轉(zhuǎn)載請注明:關(guān)東升的博客??
Swift中的枚舉可以定義一組常量囚痴、提高程序的可讀性叁怪;還具有面向?qū)ο筇匦浴?/p>
使用enum關(guān)鍵詞聲明枚舉類型,具體定義放在一對大括號內(nèi)深滚,枚舉的語法格式如下:
enum 枚舉名
{
???? 枚舉的定義
}
“枚舉名”是該枚舉類型的名稱奕谭。它首先應(yīng)該是有效的標(biāo)識符,其次應(yīng)該遵守面向?qū)ο蟮拿?guī)范痴荐,它由一組成員值和一組相關(guān)值組成血柳。
成員值
枚舉的成員值默認(rèn)情況下不是整數(shù)類型,以下代碼是聲明枚舉示例:
enum WeekDays {
??? case Monday
??? case Tuesday
??? case Wednesday
??? case Thursday
??? case Friday
}
在這些成員值前面要加上case關(guān)鍵字生兆,也可以將多個成員值放在同一行难捌,用逗號隔開,如下所示:
enum WeekDays {
??? case Monday, Tuesday, Wednesday, Thursday, Friday
}
下面我們看一個示例鸦难,代碼如下:
var day = WeekDays.Friday
day = WeekDays.Wednesday
day = .Monday?? ??? ???
使用枚舉成員賦值時候根吁,我們可以采用完整的“枚舉類型名.成員值”的形式,也可以省略枚舉類型采用“.成員值”的形式合蔽。這種省略形式能夠訪問的前提是击敌,Swift編譯器能夠根據(jù)上下文環(huán)境推斷類型。因為我們已經(jīng)在第1行和第2行給day變量賦值拴事,所以即使第3行代碼采用縮寫沃斤,Swift編譯器能夠推斷出數(shù)據(jù)類型是WeekDays。
原始值
出于業(yè)務(wù)上的需要刃宵,要為每個成員提供某種基本數(shù)據(jù)類型衡瓶,我們可以為枚舉類型提供原始值(raw values)聲明,這些原始值類型可以是:字符牲证、字符串哮针、整數(shù)和浮點數(shù)等。
原始值枚舉的語法格式如下:
enum 枚舉名: 數(shù)據(jù)類型
{ ??
?? case 成員名 = 默認(rèn)值
?? ...
}
在“枚舉名”后面跟“:”和“數(shù)據(jù)類型”就可以聲明原始值枚舉的類型从隆,然后在定義case成員的時候需要提供原始值诚撵。
以下代碼是聲明枚舉示例:
enum WeekDays: Int {
??? case Monday??????? ? = 0
??? case Tuesday??????? = 1
??? case Wednesday???? = 2
??? case Thursday?????? = 3
??? case Friday???????? = 4
}
我們聲明的WeekDays枚舉類型的原始值類型是Int,需要給每個成員賦值键闺,只要是Int類型都可以寿烟,但是每個分支不能重復(fù)。
相關(guān)值
在Swift中除了可以定義一組成員值辛燥,還可以定義一組相關(guān)值(associated values)筛武,它有點類似于C中的聯(lián)合類型缝其。下面看一個枚舉類型的聲明:
enum Figure {
??? case Rectangle(Int, Int)
??? case Circle(Int)
}
枚舉類型Figure(圖形)有兩個相關(guān)值: Rectangle(矩形)和Circle(圓形)。Rectangle和Circle是與Figure有關(guān)聯(lián)的相關(guān)值徘六,它們都是元組類型内边,對于一個特定的Figure實例,只能是其中一個相關(guān)值待锈。從這一點來看漠其,枚舉類型的相關(guān)值類似于C中的聯(lián)合類型。