天天看點

Swift Mutating

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

Swift Mutating

截屏2020-08-04 15.59.29.png