窺探Swift之別樣的列舉型別

2021-07-07 10:58:06 字數 3112 閱讀 9012

想必寫過程式的童鞋對列舉型別並不陌生吧,使用列舉型別的好處是多多的,在這兒就不做過多的贅述了。fundation框架和uikit中的列舉更是數不勝數,列舉可以使你的**更易閱讀並且可以提高可維護性。在swift語言中的列舉可謂是讓人眼前一亮。在swift中的列舉不僅保留了大部分程式語言中列舉的特性,同時還新增了一些好用而且實用的新特性,在本篇部落格中將領略一些swift中列舉型別的魅力。

有小夥伴會問,不就是列舉麼,有什麼好說的。在swift中的列舉怎不然,swift中的列舉的功能要強大的多,不僅可以給列舉元素繫結值,而且可以給列舉元素關聯多個值,同時還可以通過元素的值給乙個列舉變數賦乙個列舉值,並且列舉中可以定義列舉函式。下面將要開始窺探一下swift中的列舉。

一、定義列舉

在swift中列舉的定義與其他程式語言中定義列舉不同,在每個列舉元素前面多了乙個關鍵字case,  case後緊跟的是列舉元素,下面是定義列舉型別的兩種方式。

1. 多個case, 每個列舉元素前都有個case

//列舉的定義

enum kindofanimal

2.乙個case搞定所有元素,列舉元素之間使用逗號隔開

//你也可以這樣定義列舉型別

enum kindofanimaltwo

二、列舉型別的使用

定義完列舉型別就是為了使用的對吧,直接使用列舉型別宣告變數即可, 在swift中是不需要typedef來定義列舉型別的,我們可以直接使用列舉型別。

//定義列舉變數並賦值

var animal1: kindofanimal = kindofanimal.cat

給列舉變數賦值時也可以把列舉型別名省略掉,因為在宣告列舉變數時就已經指定了列舉變數的型別。

var animal2: kindofanimal = .dog
在switch中使用我們的列舉變數

//在switch…case中使用列舉

switch 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中的列舉是可以新增函式的,有沒有眼前一亮呢。下面的**段是在上面的關聯值**的基礎上新增了乙個描述函式,返回的就是當前列舉變數的列舉資訊,如下**段所示:

//列舉函式

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中的資料型別可謂是百花齊放百家爭鳴,下面就來窺探一...