157,swift中inout的用法(面試點(diǎn):inout可以修改屬性的值,inout是放在參數(shù)類型前,冒號(hào)后,mutating 放在方法的前面修改屬性值)

inout是 Swift 中的關(guān)鍵字,可以放置于參數(shù)類型前,冒號(hào)之后。使用 inout之后,函數(shù)體內(nèi)部可以直接更改參數(shù)值,而且改變會(huì)保留。

func swap(resSct: inout ResolutionStruct) {
    withUnsafePointer(to: &resSct) { print("During calling: \($0)") }
    let temp = resSct.height
    resSct.height = resSct.width
    resSct.width = temp
}

var iPhone6ResoStruct = ResolutionStruct(height: 1334, width: 750)
print(iPhone6ResoStruct)
withUnsafePointer(to: &iPhone6ResoStruct) { print("Before calling: \($0)") }
swap(resSct: &iPhone6ResoStruct)
print(iPhone6ResoStruct)
withUnsafePointer(to: &iPhone6ResoStruct) { print("After calling: \($0)") }

小結(jié):值類型變量作為參數(shù)傳入函數(shù),外界和函數(shù)參數(shù)的內(nèi)存地址一致,函數(shù)內(nèi)對(duì)參數(shù)的更改得到了保留。
需要注意的是:
1.使用 inout 關(guān)鍵字的函數(shù),在調(diào)用時(shí)需要在該參數(shù)前加上 & 符號(hào)
2.inout 參數(shù)在傳入時(shí)必須為變量,不能為常量或字面量(literal)
3.inout 參數(shù)不能有默認(rèn)值,不能為可變參數(shù)
4.inout 參數(shù)不等同于函數(shù)返回值,是一種使參數(shù)的作用域超出函數(shù)體的方式
5.多個(gè)inout 參數(shù)不能同時(shí)傳入同一個(gè)變量,因?yàn)榭饺肟匠龅捻樞虿欢?,那么最終值也不能確定

struct Point {
    var x = 0.0
    var y = 0.0
}

struct Rectangle {
    var width = 0.0
    var height = 0.0
    var origin = Point()
    
    var center: Point {
        get {
            print("center GETTER call")
            return Point(x: origin.x + width / 2,
                         y: origin.y + height / 2)
        }
        
        set {
            print("center SETTER call")
            origin.x = newValue.x - width / 2
            origin.y = newValue.y - height / 2
        }
    }
    
    func reset(center: inout Point) {
        center.x = 0.0
        center.y = 0.0
    }
    
}

var rect = Rectangle(width: 100, height: 100, origin: Point(x: -100, y: -100))
print(rect.center)
rect.reset(center: &rect.center)
print(rect.center)

// center GETTER call
// Point(x: -50.0, y: -50.0)

// center GETTER call
// center SETTER call

// center GETTER call
// Point(x: 0.0, y: 0.0)

inout參數(shù)的傳遞過(guò)程:

  1. 當(dāng)函數(shù)被調(diào)用時(shí),參數(shù)值被拷貝
  2. 在函數(shù)體內(nèi),被拷貝的參數(shù)修改
  3. 函數(shù)返回時(shí),被拷貝的參數(shù)值被賦值給原有的變量
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容