修改值类型的实例方法
结构体和枚举都是值类型。默认情况下,值类型的属性不能从它的内部实例方法修改。然而,如果你需要修改你的结构体或枚举的属性在一个特定的方法中,你可以在这个方法中选择加入变异行为。然后该方法可以变异(即改变)它的属性,任何的更改在方法结束时写回原来的结构里。该方法还可以分配一个新的实例到其隐含的self属性,而这个新的实例将取代现有的实例,当该方法结束时。
你可以加入这个行为,通过将mutating关键字写在方法的func关键字前:
- struct Point {
- var x = 0.0,y = 0.0 mutating func moveByX(deltaX: Double,y deltaY: Double) { x += deltaX y += deltaY }
- }
- var somePoint = Point(x: 1.0,y: 1.0)
- somePoint.moveByX(2.0,y: 3.0)
- println("The point is now at ((somePoint.x),(somePoint.y))")
- // prints "The point is now at (3.0,4.0)"
请注意,你不能使用一个常量的结构类型去调用变异方法,因为它的属性不能被改变。即使它们使可变的属性,如常量结构体实例的存储属性的描述:
let fixedPoint = Point(x: 3.0,255)">fixedPoint.moveByX(2.0,255)">// this will report an error