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