swift之mutating關鍵字

2021-07-27 00:25:38 字數 1478 閱讀 7803

swift

中,包含三種型別(type):structure,enumeration,class

其中structure和enumeration是值型別(value type),class是引用型別(reference type)

但是與objective-c不同的是,structure和enumeration也可以擁有方法(method),其中方法可以為例項方法(instance method),也可以為類方法(type method),例項方法是和型別的乙個例項繫結的。

在swift官方教程中有這樣一句話:

[plain]view plain

copy

「structures and enumerations are value types. by default, the properties of a value type  

cannot be modified from within its instance methods.」  

大致意思就是說,雖然結構體和列舉可以定義自己的方法,但是預設情況下,例項方法中是不可以修改值型別的屬性。

舉個簡單的例子,假如定義乙個點結構體,該結構體有乙個修改點位置的例項方法:

[plain]view plain

copy

struct point   

}  

編譯器丟擲錯誤,說明確實不能在例項方法中修改屬性值。

為了能夠在例項方法中修改屬性值,可以在方法定義前新增關鍵字mutating

[plain]view plain

copy

struct point   

}  var p = point(x: 5, y: 5)  

p.movexby(3, yby: 3)  

另外,在值型別的例項方法中,也可以直接修改self屬性值。

[plain]view plain

copy

enum tristateswitch   

}  }  

var ovenlight = tristateswitch.low  

ovenlight.next()  

// ovenlight is now equal to .high  

ovenlight.next()  

// ovenlight is now equal to .off」  

tristateswitch列舉定義了乙個三個狀態的開關,在next例項方法中動態改變self屬性的值。

當然,在引用型別中(即class)中的方法預設情況下就可以修改屬性值,不存在以上問題。

swift之mutating關鍵字

原文 在swift中,包含三種型別 type structure,enumeration,class 其中structure和enumeration是值型別 value type class是引用型別 reference type 但是與objective c不同的是,structure和enume...

swift之mutating關鍵字

在swift 中,包含三種型別 type structure,enumeration,class 其中structure和enumeration是值型別 value type class是引用型別 reference type 但是與objective c不同的是,structure和enumera...

Swift 什麼時候需要mutating這個引數

swift中有兩種型別 值型別和引用型別 示例 在結構體中,有乙個例項方法,如果直接修改屬性的值,編譯器會報錯。上面中如果不新增mutating這個修飾符,則會出錯,提示為 cannot assign to property self is immutable 意思就是 不能給屬性分配值,因為sel...