Swift 入門指南 V1.00 - 單元 9 - 列舉、類別與結構




列舉 (enumeration) 、類別 (class) 、結構 (structure) 的定義方式都是關鍵字 (keyword) 後加上識別字 (identifier) ,如下圖



列舉是一組常數值的定義,每個常數接在 case 之後被稱為成員 (member) ,基於型態安全 (type-safe) 原則,列舉的成員並不需要設定初值。


通常列舉用在 switch 陳述 (switch statement) 中,藉以判斷執行任務,舉例如下


enum Numbers {
   case One
   case Two
   case Three
   case Four
}
var choice = Numbers.Three
switch choice {
case .One:
   println("1")
case .Two:
   println("2")
case .Three:
   println("3")
case .Four:
   println("4")
}

Numbers 為列舉,裡頭定義了四個成員分別是 OneTwoThreeFour ,下面將 choice 設定為 Numbers.Three ,然後用 switch 陳述尋找符合的 case


輸入到 Playground ,結果如下



列舉的成員也可以是多個型態 (type) ,這時候就要在成員識別字後加上小括弧,裡頭宣告型態名稱及參數列,例如


enum Numbers2 {
   case Five(IntIntIntInt)
   case Six(String)
}
 
let choice2 = Numbers2.Five(1, 2, 3, 4)
switch choice2 {
case .Five:
   println("5")
case .Six:
   println("6")
}

輸入到 Playground ,結果如下



當列舉的成員需要設定為特定型態的數值時,這些數值就叫做原始值 (raw value) ,列舉識別字後要加上冒號宣告型態,然後成員直接指派原始值,例如


enum Numbers3: Int {
   case Seven = 1
   case Eight = 2
   case Nine = 3
   case Ten = 4
}
 
let decision = 2
if let choice3 = Numbers3(rawValue: decision) {
   switch choice3 {
   case .Seven:
      println("7")
   case .Eight:
      println("8")
   case .Nine:
      println("9")
   case .Ten:
      println("10")
   }
}

取得 Number3 的成員值要加上參數 rawValue ,而 choice3 的宣告即指派都放在 if 陳述 (if statement) 的條件 (condition) 中,這是因為取出來的列舉成員為選擇型態 (optionals) 。


輸入到 Playground ,結果如下



至於結構與類別在定義上很相似,都是關鍵字 structclass 之後接識別字


struct StructDemo {
   // task
}
 
class ClassDemo {
   // task
}

輸入到 Playground ,結果如下



我們在下個單元繼續討論結構與類別兩者的成員,也就是屬性 (property) 及方法 (method) 。


中英文術語對照


列舉enumeration
類別class
結構structure
關鍵字keyword
識別字identifier
成員member
型態安全type-safe
switch 陳述switch statement
型態type
原始值raw value
if 陳述if statement
條件condition
選擇型態optionals
屬性property
方法method

沒有留言: