最佳答案
当涉及到 Swift 中的变异值类型时,有些东西我并不完全理解。
正如“快速编程语言”iBook 所说: 默认情况下,值类型的属性不能从其实例方法中修改
为了实现这一点,我们可以在 structs 和 enum 中使用 mutating
关键字声明方法。
我不完全清楚的是: 您可以从 struct 外部更改 var,但不能从它自己的方法更改它。对我来说,这似乎有违直觉,因为在面向对象语言中,您通常试图封装变量,这样它们只能从内部进行更改。对于 structs,情况似乎恰恰相反。为了详细说明,这里有一个代码片段:
struct Point {
var x = 0, y = 0
mutating func moveToX(x: Int, andY y:Int) { //Needs to be a mutating method in order to work
self.x = x
self.y = y
}
}
var p = Point(x: 1, y: 2)
p.x = 3 //Works from outside the struct!
p.moveToX(5, andY: 5)
有人知道为什么结构不能从它们自己的上下文中更改它们的内容,而其他地方的内容却可以轻松地更改吗?