Swift 語言中結構體和枚舉是值類型。一般情況下,值類型的屬性不能在它的執行個體方法中被修改。
但是,如果你确實需要在某個具體的方法中修改結構體或者枚舉的屬性,你可以選擇變異(mutating)這個方法,然後方法就可以從方法内部改變它的屬性;并且它做的任何改變在方法結束時還會保留在原始結構中。
方法還可以給它隐含的self屬性指派一個全新的執行個體,這個新執行個體在方法結束後将替換原來的執行個體。
import UIKit
struct Area {
var length = 0
var breadth = 0
func area() -> Int {
return length * breadth
}
mutating func scaleBy(res: Int) {
length *= res
breadth *= res
print("length:\(length)","breadth:\(breadth)")
print("area:",area());
}
}
複制
var val = Area(length: 3, breadth: 5)
val.scaleBy(res: 3)
列印
length:9 breadth:15
area: 135
複制
假如我們去掉mutating

截屏2020-08-04 15.59.29.png