部分参考:swift之mutating关键字
swift中在structures和enumerations的方法中修改属性值,那么这个方法前必须加mutating。
struct Point {
var x = 0, y = 0
mutating func moveXBy(x:Int,yBy y:Int) {
self.x += x
self.y += y
}
}
var p = Point(x: 5, y: 5)
p.moveXBy(3, yBy: 3)
之前一直在想为什么要加这个关键字,不加觉得也没什么问题吧,直到我看到下面的示例:
enum TriStateSwitch {
case Off, Low, High
mutating func next() {
switch self {
case Off:
self = Low
case Low:
self = High
case High:
self = Off
}
}
}
var ovenLight = TriStateSwitch.Low
ovenLight.next()
// ovenLight is now equal to .High
ovenLight.next()
// ovenLight is now equal to .Off”
这里的枚举,值类型,直接修改self本身。我猜测可能这里用mutating做标记,表明这个方法是不被instance引用,即方法与instance无关联。
网友评论