想必寫過程式的童鞋對列舉型別並不陌生吧,使用列舉型別的好處是多多的,在這兒就不做過多的贅述了。fundation框架和uikit中的列舉更是數不勝數,列舉可以使你的**更易閱讀並且可以提高可維護性。在swift語言中的列舉可謂是讓人眼前一亮。在swift中的列舉不僅保留了大部分程式語言中列舉的特性,同時還新增了一些好用而且實用的新特性,在本篇部落格中將領略一些swift中列舉型別的魅力。
有小夥伴會問,不就是列舉麼,有什麼好說的。在swift中的列舉怎不然,swift中的列舉的功能要強大的多,不僅可以給列舉元素繫結值,而且可以給列舉元素關聯多個值,同時還可以通過元素的值給乙個列舉變數賦乙個列舉值,並且列舉中可以定義列舉函式。下面將要開始窺探一下swift中的列舉。
一、定義列舉
在swift中列舉的定義與其他程式語言中定義列舉不同,在每個列舉元素前面多了乙個關鍵字case, case後緊跟的是列舉元素,下面是定義列舉型別的兩種方式。
1. 多個case, 每個列舉元素前都有個case
1//列舉的定義
2enum
kindofanimal
2.乙個case搞定所有元素,列舉元素之間使用逗號隔開
1//你也可以這樣定義列舉型別
2enum
kindofanimaltwo
二、列舉型別的使用
定義完列舉型別就是為了使用的對吧,直接使用列舉型別宣告變數即可, 在swift中是不需要typedef來定義列舉型別的,我們可以直接使用列舉型別。
//定義列舉變數並賦值
var animal1: kindofanimal = kindofanimal.cat
給列舉變數賦值時也可以把列舉型別名省略掉,因為在宣告列舉變數時就已經指定了列舉變數的型別。
var animal2: kindofanimal = .dog
在switch中使用我們的列舉變數
1//在switch…case中使用列舉
2switch
animal1
三、給列舉成員賦值
在swift中宣告列舉時,是可以給每個列舉成員賦乙個值的,下面的city列舉的成員就被指定了乙個值,如下所示:
//給列舉賦值
enum
city: string
使用列舉變數的rawvalue可以獲取給每個列舉成員賦的值,**如下:
//定義列舉變數並賦值
var myincity: city =city.beijing
//獲取列舉變數的值
var myincitystring: string =myincity.rawvalue;
println(myincitystring)
//輸出:北京
四、通過列舉成員的值給列舉變數賦值
什麼是通過列舉成員的值給列舉變數賦值呢?舉個例子,以上面的列舉型別city為例,假如我們只知道乙個列舉成員的值是「北京」,而不知道「北京」這個值對應的列舉成員是"beijing", 在swift中是可以通過「北京」這個值給列舉變數賦乙個列舉成員「beijing」的。
是不是有點繞啊,來點例項吧,下面就是通過列舉成員的原始值給列舉變數賦值的**
//通過列舉成員的值,來給列舉成員賦值
var youincity: city? = city(rawvalue: "
北京");
為啥我們的youincity是可選值型別的呢?原因很簡單,我們不確定列舉city中的成員的值是否含有「北京」,列舉變數youincity的值是不確定的,所以嘍是可選型別的,下面我們就取出youincity的值,首先判斷youincity是否為city.beijing, 如果是,說明賦值成功就輸出值。
//取出youincity中的值
if youincity ==city.beijing
找乙個列舉成員的值中不包含的字串用來給列舉變數賦值,觀察一下結果,下面的testcity的值列印出來為nil, 因為列舉中沒有乙個成員的值為「京」。
//傳入乙個列舉中沒有的值
var testcity: city? = city(rawvalue: "京"
);//
testcity為nil
println(testcity)
五、列舉值自增
好東西還是要保留的,在swift中的列舉值如果是整數的話,第乙個賦值後,後邊的會自增的。關於列舉值自增就不多說了,直接看例項吧。
//列舉值自增
enum
hour: int
var hourtest: int =hour.eight.rawvalue
println(hourtest)
//hourtest = 8
六、列舉關聯值
什麼是列舉的關聯值呢?從字面意思上看是給列舉成員關聯乙個值,沒錯,就是在給列舉變數賦值時,給列舉變數關聯乙個值。在swift中如何做的呢?就是在宣告列舉型別中的元素時使用小括號來制定關聯值的型別,然後在給列舉變數賦值的時候關聯乙個或者多個值即可,直接看例項。
下面的**是給ios指定了兩個string型別的關聯值,在給列舉變數賦值的時候關聯兩個值。關聯這兩個值可以在switch語句中進行使用。
//列舉的關聯值
enum
mobilelanguage
var iphone: mobilelanguage = mobilelanguage.ios("
objective-c
", "
swift")
switch
iphone
//輸出結果:language1 = objective-c, language2 = swift
七、列舉函式
在swift中的列舉是可以新增函式的,有沒有眼前一亮呢。下面的**段是在上面的關聯值**的基礎上新增了乙個描述函式,返回的就是當前列舉變數的列舉資訊,如下**段所示:
1//列舉函式
2enum
mobilelanguagefun
1617}18
}1920var mymobile: mobilelanguagefun = mobilelanguagefun.ios("
objc
", "
swift")
2122 println(mymobile.description) //
language1 = objc, language2 = swift
今天的部落格內容也夠長了,就先到這兒吧,以後會繼續更新關於swift內容的部落格的。
窺探Swift之別樣的列舉型別
想必寫過程式的童鞋對列舉型別並不陌生吧,使用列舉型別的好處是多多的,在這兒就不做過多的贅述了。fundation框架和uikit中的列舉更是數不勝數,列舉可以使你的 更易閱讀並且可以提高可維護性。在swift語言中的列舉可謂是讓人眼前一亮。在swift中的列舉不僅保留了大部分程式語言中列舉的特性,同...
窺探Swift之別樣的列舉型別
想必寫過程式的童鞋對列舉型別並不陌生吧,使用列舉型別的好處是多多的,在這兒就不做過多的贅述了。fundation框架和uikit中的列舉更是數不勝數,列舉可以使你的 更易閱讀並且可以提高可維護性。在swift語言中的列舉可謂是讓人眼前一亮。在swift中的列舉不僅保留了大部分程式語言中列舉的特性,同...
窺探Swift之基本資料型別
中介紹了如何使用playground來學習swift語言。本篇部落格就使用playground來窺探swift語言。千里之行始於足下,當然了,除非你是坐的高鐵或者飛機。還是那句話從基礎開始吧,本篇部落格主要介紹一下swift的基本資料型別。swift中的資料型別可謂是百花齊放百家爭鳴,下面就來窺探一...