Swift突變方法要求
突變方法要求
能在方法
或函數
內部改變實例類型的方法稱為突變方法
。在值類型(Value Type)
(譯者注:特指結構體和枚舉)中的的函數
前綴加上mutating
關鍵字來表示該函數允許改變該實例和其屬性的類型。 這一變換過程在實例方法(Instance Methods)章節中有詳細描述。
(譯者注:類中的成員為引用類型(Reference Type)
,可以方便的修改實例及其屬性的值而無需改變類型;而結構體
和枚舉
中的成員均為值類型(Value Type)
,修改變量的值就相當於修改變量的類型,而Swift
默認不允許修改類型,因此需要前置mutating
關鍵字用來表示該函數
中能夠修改類型)
注意: 用
class
實現協議中的mutating
方法時,不用寫mutating
關鍵字;用結構體
,枚舉
實現協議中的mutating
方法時,必須寫mutating
關鍵字。
如下所示,Togglable
協議含有toggle
函數。根據函數名稱推測,toggle
可能用於切換或恢複某個屬性的狀態。mutating
關鍵字表示它為突變方法
:
protocol Togglable {
mutating func toggle()
}
當使用枚舉
或結構體
來實現Togglabl
協議時,必須在toggle
方法前加上mutating
關鍵字。
如下所示,OnOffSwitch
枚舉遵循
了Togglable
協議,On
,Off
兩個成員用於表示當前狀態
enum OnOffSwitch: Togglable {
case Off, On
mutating func toggle() {
switch self {
case Off:
self = On
case On:
self = Off
}
}
}
var lightSwitch = OnOffSwitch.Off
lightSwitch.toggle()
//lightSwitch 現在的值為 .On