推荐答案
在 Swift 中,结构体的方法中如果需要修改属性值,必须将方法标记为 mutating。mutating 关键字允许方法修改结构体的属性值。
// www.javascriptcn.com code example
struct Point {
var x: Int
var y: Int
mutating func moveBy(x deltaX: Int, y deltaY: Int) {
x += deltaX
y += deltaY
}
}
var point = Point(x: 0, y: 0)
point.moveBy(x: 10, y: 20)
print(point) // 输出: Point(x: 10, y: 20)本题详细解读
1. 结构体的不可变性
在 Swift 中,结构体是值类型。默认情况下,结构体的实例是不可变的,这意味着你不能在普通方法中修改结构体的属性值。
2. mutating 关键字的作用
为了允许结构体的方法修改其属性值,Swift 提供了 mutating 关键字。通过在方法前加上 mutating 关键字,你可以告诉编译器这个方法会修改结构体的状态。
3. 使用 mutating 方法的限制
mutating方法只能用于变量实例(var),不能用于常量实例(let)。因为常量实例是不可变的,无法修改其属性值。let constantPoint = Point(x: 0, y: 0) // constantPoint.moveBy(x: 10, y: 20) // 编译错误: 不能对常量实例调用 mutating 方法
mutating方法可以修改结构体的所有属性,包括存储属性和计算属性。
4. 示例解析
在上面的示例中,moveBy(x:y:) 方法被标记为 mutating,因此它可以修改 Point 结构体的 x 和 y 属性。调用 moveBy(x:y:) 方法后,point 实例的属性值被成功修改。
5. 总结
mutating 关键字是 Swift 中用于允许结构体方法修改属性值的关键机制。通过使用 mutating,你可以在结构体的方法中安全地修改其状态。