Swift編程之枚舉類型詳解
想必寫(xiě)過(guò)程序的童鞋對(duì)枚舉類型并不陌生吧,使用枚舉類型的好處是多多的,在這兒就不做過(guò)多的贅述了。Fundation框架和UIKit中的枚舉更是數(shù)不勝數(shù),枚舉可以使你的代碼更易閱讀并且可以提高可維護(hù)性。在Swift語(yǔ)言中的枚舉可謂是讓人眼前一亮。在Swift中的枚舉不僅保留了大部分編程語(yǔ)言中枚舉的特性,同時(shí)還添加了一些好用而且實(shí)用的新特性,在本篇文章中將領(lǐng)略一些Swift中枚舉類型的魅力。
有小伙伴會(huì)問(wèn),不就是枚舉么,有什么好說(shuō)的。在Swift中的枚舉怎不然,Swift中的枚舉的功能要強(qiáng)大的多,不僅可以給枚舉元素綁定值,而且可以給枚舉元素關(guān)聯(lián)多個(gè)值,同時(shí)還可以通過(guò)元素的值給一個(gè)枚舉變量賦一個(gè)枚舉值,并且枚舉中可以定義枚舉函數(shù)。下面將要開(kāi)始窺探一下Swift中的枚舉。
一、定義枚舉
在Swift中枚舉的定義與其他編程語(yǔ)言中定義枚舉不同,在每個(gè)枚舉元素前面多了一個(gè)關(guān)鍵字case, case后緊跟的是枚舉元素,下面是定義枚舉類型的兩種方式。
1. 多個(gè)case, 每個(gè)枚舉元素前都有個(gè)case
//枚舉的定義 enum KindOfAnimal { case Cat case Dog case Cow case Duck case Sheep }
2.一個(gè)case搞定所有元素,枚舉元素之間使用逗號(hào)隔開(kāi)
//你也可以這樣定義枚舉類型 enum KindOfAnimalTwo { case Cat, Dog, Cow, Duck, Sheep }
二、枚舉類型的使用
定義完枚舉類型就是為了使用的對(duì)吧,直接使用枚舉類型聲明變量即可, 在Swift中是不需要typedef來(lái)定義枚舉類型的,我們可以直接使用枚舉類型。
//定義枚舉變量并賦值 var animal1: KindOfAnimal = KindOfAnimal.Cat
給枚舉變量賦值時(shí)也可以把枚舉類型名省略掉,因?yàn)樵诼暶髅杜e變量時(shí)就已經(jīng)指定了枚舉變量的類型。
var animal2: KindOfAnimal = .Dog
在Switch中使用我們的枚舉變量
//在Switch…Case中使用枚舉 switch animal1 { case KindOfAnimal.Cat: println("Cat") case KindOfAnimal.Dog: println("Dog") case KindOfAnimal.Cow: println("Cow") case KindOfAnimal.Duck: println("Duck") case KindOfAnimal.Sheep: println("Sheep") default: println("error = 呵呵") }
三、給枚舉成員賦值
在Swift中聲明枚舉時(shí),是可以給每個(gè)枚舉成員賦一個(gè)值的,下面的City枚舉的成員就被指定了一個(gè)值,如下所示:
//給枚舉賦值 enum City: String{ case Beijing = "北京" case ShangHai = "上海" case GuangZhou = "廣州" case ShengZhen = "深圳" }
使用枚舉變量的rawValue可以獲取給每個(gè)枚舉成員賦的值,代碼如下:
//定義枚舉變量并賦值 var myInCity: City = City.Beijing //獲取枚舉變量的值 var myInCityString: String = myInCity.rawValue; println(myInCityString) //輸出:北京
四、通過(guò)枚舉成員的值給枚舉變量賦值
什么是通過(guò)枚舉成員的值給枚舉變量賦值呢?舉個(gè)例子,以上面的枚舉類型City為例,假如我們只知道一個(gè)枚舉成員的值是“北京”,而不知道“北京”這個(gè)值對(duì)應(yīng)的枚舉成員是"Beijing", 在Swift中是可以通過(guò)“北京”這個(gè)值給枚舉變量賦一個(gè)枚舉成員“Beijing”的。
是不是有點(diǎn)繞啊,來(lái)點(diǎn)實(shí)例吧,下面就是通過(guò)枚舉成員的原始值給枚舉變量賦值的代碼
//通過(guò)枚舉成員的值,來(lái)給枚舉成員賦值 var youInCity: City? = City(rawValue: "北京");
為啥我們的youInCity是可選值類型的呢?原因很簡(jiǎn)單,我們不確定枚舉City中的成員的值是否含有“北京”,枚舉變量youInCity的值是不確定的,所以嘍是可選類型的,下面我們就取出youInCity的值,首先判斷youInCity是否為City.Beijing, 如果是,說(shuō)明賦值成功就輸出值。
//取出youInCity中的值 if youInCity == City.Beijing { var cityName: NSString = youInCity!.rawValue println(cityName) //輸出:北京 }
找一個(gè)枚舉成員的值中不包含的字符串用來(lái)給枚舉變量賦值,觀察一下結(jié)果,下面的testCity的值打印出來(lái)為nil, 因?yàn)槊杜e中沒(méi)有一個(gè)成員的值為“京”。
//傳入一個(gè)枚舉中沒(méi)有的值 var testCity: City? = City(rawValue: "京"); // testCity為nil println(testCity)
五、枚舉值自增
好東西還是要保留的,在Swift中的枚舉值如果是整數(shù)的話,第一個(gè)賦值后,后邊的會(huì)自增的。關(guān)于枚舉值自增就不多說(shuō)了,直接看實(shí)例吧。
//枚舉值自增 enum Hour: Int{ case One = 1 case Two case Three case Four case Five case Six case Seven case Eight } var hourTest: Int = Hour.Eight.rawValue println(hourTest) // hourTest = 8
六、枚舉關(guān)聯(lián)值
什么是枚舉的關(guān)聯(lián)值呢?從字面意思上看是給枚舉成員關(guān)聯(lián)一個(gè)值,沒(méi)錯(cuò),就是在給枚舉變量賦值時(shí),給枚舉變量關(guān)聯(lián)一個(gè)值。在Swift中如何做的呢?就是在聲明枚舉類型中的元素時(shí)使用小括號(hào)來(lái)制定關(guān)聯(lián)值的類型,然后在給枚舉變量賦值的時(shí)候關(guān)聯(lián)一個(gè)或者多個(gè)值即可,直接看實(shí)例。
下面的代碼是給iOS指定了兩個(gè)String類型的關(guān)聯(lián)值,在給枚舉變量賦值的時(shí)候關(guān)聯(lián)兩個(gè)值。關(guān)聯(lián)這兩個(gè)值可以在Switch語(yǔ)句中進(jìn)行使用。
//枚舉的關(guān)聯(lián)值 enum mobileLanguage{ case IOS (String, String) case Android (String) } var iPhone: mobileLanguage = mobileLanguage.IOS("Objective-C", "Swift") switch iPhone { case mobileLanguage.IOS(let language1, let language2): println("language1 = \(language1), language2 = \(language2)") case mobileLanguage.Android(let temp): println(temp); default: println("NO") } //輸出結(jié)果:language1 = Objective-C, language2 = Swift
七、枚舉函數(shù)
在Swift中的枚舉是可以添加函數(shù)的,有沒(méi)有眼前一亮呢。下面的代碼段是在上面的關(guān)聯(lián)值代碼的基礎(chǔ)上添加了一個(gè)描述函數(shù),返回的就是當(dāng)前枚舉變量的枚舉信息,如下代碼段所示:
//枚舉函數(shù) enum mobileLanguageFun{ case IOS (String, String) case Android (String) //定義枚舉函數(shù) var description: String{ switch self { case mobileLanguageFun.IOS(let language1, let language2): return "language1 = \(language1), language2 = \(language2)" case mobileLanguageFun.Android(let temp): return temp default: return ("NO") } } } var myMobile: mobileLanguageFun = mobileLanguageFun.IOS("objc", "swift") println(myMobile.description) //language1 = objc, language2 = swift
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)swift軟件編程有所幫助。
相關(guān)文章
Swift、Objective-C、Cocoa混合編程設(shè)置指南
這篇文章主要介紹了Swift、Objective-C、Cocoa混合編程設(shè)置指南,需要的朋友可以參考下2014-07-07Flutter iOS開(kāi)發(fā)OC混編Swift動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)問(wèn)題填坑
這篇文章主要為大家介紹了Flutter iOS OC 混編 Swift動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)問(wèn)題填坑詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Swift?Error重構(gòu)的基礎(chǔ)示例詳解
這篇文章主要為大家介紹了Swift?Error基礎(chǔ)錯(cuò)誤處理的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Swift簡(jiǎn)單快速的動(dòng)態(tài)更換app圖標(biāo)AppIcon方法示例
這篇文章主要為大家介紹了Swift動(dòng)態(tài)更換app圖標(biāo)AppIcon的簡(jiǎn)單快速方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06swift實(shí)現(xiàn)簡(jiǎn)易計(jì)算器項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了swift實(shí)現(xiàn)簡(jiǎn)易計(jì)算器項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01純swift實(shí)現(xiàn)ipad版簡(jiǎn)單美團(tuán)界面功能
這篇文章主要為大家詳細(xì)介紹了純swift實(shí)現(xiàn)ipad版簡(jiǎn)單美團(tuán)界面功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11Swift中通知中心(NotificationCenter)的使用示例
這篇文章主要給大家介紹了關(guān)于Swift中通知中心(NotificationCenter)使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10swift語(yǔ)言AutoreleasePool原理及使用場(chǎng)景
這篇文章主要為大家介紹了swift語(yǔ)言AutoreleasePool原理及使用場(chǎng)景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Swift使用enum抹平數(shù)組元素差異實(shí)例詳解
這篇文章主要為大家介紹了Swift使用enum抹平數(shù)組元素差異實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11