Swift 中的 mutating 关键字
在 Swift 中,mutating 关键字用于修饰结构体(struct)和枚举(enum)的方法,使其能够修改自身的属性。默认情况下,值类型(如结构体和枚举)的实例方法是不能修改其属性的,而引用类型(如类)的实例方法则没有这个限制12。
使用示例
在结构体中使用 mutating
在结构体中,如果需要在方法中修改属性值,可以使用 mutating 关键字。例如:
struct Point {
var x = 0
var y = 0
mutating func movePoint(x: Int, y: Int) {
self.x += x
self.y += y
}
}
在上述代码中,movePoint 方法被 mutating 修饰,因此可以修改 Point 结构体的 x 和 y 属性3。
在枚举中使用 mutating
在枚举中,如果需要在方法中修改 self,也需要使用 mutating 关键字。例如:
enum TriSwitch {
case Off, Low, High
mutating func next() {
switch self {
case .Off:
self = .Low
case .Low:
self = .High
case .High:
self = .Off
}
}
}
在上述代码中,next 方法被 mutating 修饰,因此可以修改 TriSwitch 枚举的值3。
在协议中使用 mutating
在 Swift 中,协议(protocol)也可以包含 mutating 方法。实现该协议的结构体或枚举需要使用 mutating 关键字,而类则不需要。例如:
protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
}
struct SimpleStruct: ExampleProtocol {
var simpleDescription: String = "A simple structure"
mutating func adjust() {
simpleDescription += " (adjusted)"
}
}
class SimpleClass: ExampleProtocol {
var simpleDescription: String = "A very simple class"
func adjust() {
simpleDescription += " Now 100% adjusted"
}
}
漫思
浙公网安备 33010602011771号