美文网首页Swift学习
Swift 5.x 关键字 mutating 的作用

Swift 5.x 关键字 mutating 的作用

作者: ShenYj | 来源:发表于2020-07-02 21:04 被阅读0次
1. 在实例方法中修改属性
  • 结构体和枚举是值类型. 默认情况下, 值类型属性不能被自身的实例方法修改.
  • 可以选择在func关键字前加上mutating关键字来指定实例方法内可以修改属性


    e.g.
struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deLtaY: Double) {
        x += deltaX
        y += deLtaY
    }
}

var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 2.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")

输出结果:

The point is now at (3.0, 3.0)

如果在方法前没有加mutating修饰, 那么在修改属性的位置就会报错:
Left side of mutating operator isn't mutable: 'self' is immutable

2. 在mutating方法中赋值给self
  • mutating 方法可以指定整个实例给隐含的self属性

e.g.

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deLtaY: Double) {
        self = Point(x: 3.0, y: 3.0)
    }
}
3. 枚举的mutating 方法
  • 枚举的mutating方法可以设置隐含的self属性为相同枚举里的不同成员, 与结构体类似

e.g.

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.next()

print(ovenLight)

输出结果:

off

相关文章

网友评论

    本文标题:Swift 5.x 关键字 mutating 的作用

    本文链接:https://www.haomeiwen.com/subject/qkrdqktx.html