Swift 语言中结构体和枚举是值类型。一般情况下,值类型的属性不能在它的实例方法中被修改。
但是,如果你确实需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择变异(mutating)这个方法,然后方法就可以从方法内部改变它的属性;并且它做的任何改变在方法结束时还会保留在原始结构中。
方法还可以给它隐含的self属性赋值一个全新的实例,这个新实例在方法结束后将替换原来的实例。
1 import UIKit 2 3 struct size { 4 var width = 0 5 var height = 0 6 7 func size() -> Int { 8 return width * height 9 } 10 11 mutating func changeSize(count: Int) { 12 width *= count 13 height *= count 14 } 15 }
假如我们去掉mutating,将会报错