知識點總結:swift
一、在傳遞枚舉給函數或比較枚舉時能夠省略枚舉類型。編輯器
enum TextAlignment{ case left case right case center } var alignment = TextAlignment.left alignment = .right if alignment == .right{ print("OK") }
二、原始值枚舉:swift支持一系列類型,包括全部內建數值類型和字符串ide
enum TextAlignment:Int{ case left = 20 case right = 30 case center = 40 } enum Language:String{ case swift case objectiveC = "object-c" case c }
若是枚舉的原始值爲String,而且沒有給成員賦值,那麼該成員就會默認成員自己的名字同樣。函數
三、獲取原始值枚舉的值;根據值構造原始值枚舉spa
let alignment = TextAlignment.left.rawValue let myRawValue = 20 if let myAlignment = TextAlignment(rawValue:myRawValue){ print("OK") }
四、枚舉的方法指針
enum Lightbulb{ case on case off mutating func toggle(){ switch self { case .on: self = .off case .off: self = .on } } }
在swift中,枚舉是值類型,而值類型的方法不能在方法內對self就行修改,須要添加標記mutating。code
五、關聯值blog
enum ShapeDimen{ case oquare(side:Double) case rectangle(width:Double,height:Double) case point }
六、遞歸值遞歸
enum FamilyTree{ case noKnownParents indirect case oneKnownParents(name:String,ancestors:FamilyTree) indirect case twoKnownParents(fatherName:String,fatherAncestors:FamilyTree, motherName:String,motherAncestors:FamilyTree) }
swift編譯器須要知道程序中每種類型的每一個實例佔據多少內存空間。儘管一個枚舉的實例可能隨着程序的運行變爲其餘成員值,可是編譯器知道,同一時間它只會是一個成員值。因而,當編譯器判斷一個枚舉實例須要多少內存的時候,會查看每種成員值並找出須要最多內存的那個。若是一個枚舉本身的成員又是本身的話,編輯器就沒法知道該枚舉的存儲空間。swift用關鍵字indirect告訴編譯器把枚舉的數據放到一個指針指向的地方。內存