swift 枚舉

知識點總結: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告訴編譯器把枚舉的數據放到一個指針指向的地方。內存

相關文章
相關標籤/搜索