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 會報出錯誤訊息
enum Myswitch: Myprotocol {
case Off, On
mutating func toggle() {
switch self {
case Off:
self = On
case On:
self = Off
}
}
}
- var sw=Myswitch.On // instantiate sw 被實體法, 它隸屬 Myswich 型別
print("Now sw state is:\(sw)") // sw=On
sw.toggle() // 使用特異功能來切換 sw 的值
- print("Now sw state is:\(sw)") // sw=Off
// mutating func --> 我把它翻譯成特異功能, 因為它會改變 self.
沒有留言:
張貼留言