位置:首頁 > 高級語言 > Swift教學 > Swift突變方法要求

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協議,OnOff兩個成員用於表示當前狀態

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