列舉定義了乙個通用型別的一組相關值,使我們可以在**中以一種安全的方式來使用這些值。
基本語法:
使用 enum 關鍵字定義列舉
enum 列舉名
enum compasspoint
成員值乙個列舉中定義的值,是列舉的成員值(成員),case 關鍵字表示乙個新的成員值將被定義。
列舉的成員值不會被預設賦予乙個整型值。
多個成員值可以出現在同一行上,用逗號隔開:
enum planet
使用列舉成員值賦值時,可以採用 「列舉名.成員值「的形式
var value = compasspoint.north
當swift編譯器能夠根據上下文推斷出型別時,也可以使用「 . 成員值」的形式來賦值
var directiontohead= compasspoint.north
directiontohead = .west
如上,value 第一次 被賦值,第二次給value賦值時,編譯器就能推斷出是compasspoint 型別,所以可以直接用 .west 給value賦值,增強**的可讀性。
原始值
列舉成員可以被預設值(原始值)賦值,其中這些原始值具有相同的資料型別。
基本語法:
enum 列舉名:資料型別
enum weekdays:int
訪問 列舉成員原始值
可以使用 列舉成員值的 rawvalue 屬性來訪問 成員的原始值
var day = weekdays.friday.rawvalue
print(day)
//4
隱式賦值
在使用原始值為整數或者字串型別的列舉時,不需要顯式的為每乙個成員賦值,這時,swift將會自動賦值。
例如,當使用整數作為原始值時,隱式賦值的值依次遞增1。如果第乙個值沒有被賦初值,將會被自動置為0。
enum weekdays:int
var day = weekdays.friday.rawvalue
print(day)
//4
使用原始值初始化列舉變數
如果在定義列舉型別的時候使用了原始值,那麼將會自動獲得乙個初始化方法,這個方法將原始值型別作為參
數,返回列舉成員或者nil 。你可以使用這種初始化方法來建立乙個新的列舉變數。
enum weekdays:string
var day = weekdays(rawvalue: "friday") //通過原始值 friday 建立乙個列舉變數
print(day)
//optional(weekdays.friday)
因為 不是所有的傳入值都能匹配到乙個原始值,所以返回值為 可選型別。
相關值
每個成員的資料型別可以不同。類似c中的聯合型別
enum figure
var type = figure.type("長方形")
var area = figure.area(100, 200)
print("type is \(type) and area is \(area)")
//type is type("長方形") and area is area(100, 200)
遞迴列舉
遞迴列舉是一種列舉型別,表示它的列舉中,有乙個或多個列舉成員擁有該列舉的,其他成員作為相關值。
基本語法:
enum 列舉名 或者
indirect enum 列舉名
在成員值 前加 indirect 關鍵字,表示該成員值,可以遞迴,在 列舉型別前加indirect 關鍵字,表示所有成員都可以遞迴。
enum arithmeticexpression
func evaluate(expression: arithmeticexpression) -> int
}// 計算 (5 + 4) * 2
let five = arithmeticexpression.number(5)
let four = arithmeticexpression.number(4)
let sum = arithmeticexpression.addition(five, four)
let product = arithmeticexpression.multiplication(sum, arithmeticexpression.number(2))
print(evaluate(product))
// 輸出 "18"
Swift學習筆記 列舉
swift 中普通的列舉形式 enum direction 注意 在 swift 中,列舉的成員變數有著不同的值,他們不再是0,1,2,3 了 多個成員值也可以出現在同一行上,但是要用逗號隔開 enum direction 這一句過後,unknowdirection 就會被推斷是 direction...
Swift 的學習 列舉
在swift中,列舉型別是相當重要的乙個資料型別,他跟以往的c語言 object c中的列舉型別有很大的區別 1 在你的 中,用列舉是型別安全的 default 這個分支是沒有必要的寫的,此swich語句中,httpmethond列舉中兩個分支都已經存在 switch getenum compass...
swift學習筆記之列舉
列舉型別 成員 計算屬性,型別屬性 下標指令碼 方法 enum 的關鍵字不能省略 1 定義任意型別的列舉成員 enum anyenum north 可以賦值任意型別 2 指定型別的列舉成員 enum derication north 只能字串 3.可以初始化列舉成員的值,但是原始值必須是唯一的,不能...