2016年4月10日 星期日

swift 學習筆記 1: enum

enum 是用來自訂"列舉型別", 列舉成員屬性用 case 來宣告. 如下所述:

enum Myenum {
case head, body, leg, hand
}

宣告變數隸屬 Mynum 型別, 初始值為 head:
var a: Myenum = Myenum.head

上述型別(:Myenum)其實 swift 可以推論出來, 可以不寫, 同樣合語法.
var a=Myenum.head
// 一旦 type 確認後, 修改值直接用具句號取值就可
a=.body

變數 a 經上述型別設定後, 則只能賦予 Myenum.head Myenum.body, Myenum.leg, Myenum.hand 等四種值. 而將變數 a 列印出來會發現, 它只可能是集合 { head, body, leg, hand } 中的成員之一.

利用協議(protocol) 來定義自體特異功能 (Mutating Method)

protocol Myprotocol {
mutating func toggle()
}

也些時候 instance (實體, 實例, ...?) 的自體內容需要被改變, 它可透過自我 method (方法, 工具, 功能, 運功, 特異功能 ...?) 來改變. 如要強制用此種方式修改就稱作協定, 而型別如果運用(遵循)此協議的必須將它實現, 由於它可能會動用到自體內容, 因此該 method 必須加上 mutating 的前置字眼

底下定義了一個列舉型別 Myswitch{Off, On}, 須遵循 Myprotocol, Myprotocol 裏面只有一個用來切換 (toggle) 的功能需要被實現, 而該切換的動作會改變到本身(instance self), 故此方法必須標明是 mutating, 否則 compile 會報出錯誤訊息

  1. enum Myswitch: Myprotocol {
  2. case Off, On
  3. mutating func toggle() {
  4. switch self {
  5. case Off:
  6. self = On
  7. case On:
  8. self = Off
  9. }
  10. }
  11. }
  12. var sw=Myswitch.On         // instantiate sw 被實體法, 它隸屬 Myswich 型別
  13. print("Now sw state is:\(sw)") // sw=On
  1. sw.toggle() // 使用特異功能來切換 sw 的值
  2. print("Now sw state is:\(sw)") // sw=Off
  3. // mutating func --> 我把它翻譯成特異功能, 因為它會改變 self.







沒有留言: