Swift 關(guān)鍵字 inout - 讓值類型以引用方式傳遞

兩種參數(shù)傳遞方式

值類型

傳遞的是參數(shù)的一個副本,這樣在調(diào)用參數(shù)的過程中不會影響原始數(shù)據(jù)。

引用類型

把參數(shù)本身引用(內(nèi)存地址)傳遞過去,在調(diào)用的過程會影響原始數(shù)據(jù)。

在 Swift 眾多數(shù)據(jù)類型中,只有 class 是引用類型,
其余的如 Int、Float、Bool、Character、Array、Set、enum、struct全都是類型.

讓值類型以引用方式傳遞

有時候我們需要通過一個函數(shù)改變函數(shù)外面變量的值(將一個值類型參數(shù)以引用方式傳遞),
這時,Swift 提供的 inout 關(guān)鍵字就可以實現(xiàn)。
舉例:

/// 以下代碼已更新到 Swift 4.0
var value = 50
print(value)  // 此時value值為50

func increment(_ value: inout Int, _ length: Int = 10) {
    value += length
}

increment(&value)
print(value)  // 此時 value 值為60,成功改變了函數(shù)外部變量 value 的值

即:聲明函數(shù)時,在參數(shù)類型前面用 inout 修飾,函數(shù)內(nèi)部實現(xiàn)改變外部參數(shù)
傳入?yún)?shù)時(調(diào)用函數(shù)時),在變量名字前面用 & 符號修飾表示,表明這個變量在參數(shù)內(nèi)部是可以被改變的(可將改變傳遞到原始數(shù)據(jù))

注意

  1. inout 修飾的參數(shù)是不能有默認值的(例子中 length = 10被賦予默認值),有范圍的參數(shù)集合也不能被修飾;
  2. 一個參數(shù)一旦被 inout 修飾,就不能再被 var 和 let 修飾了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,202評論 1 10
  • Hello Word 在屏幕上打印“Hello, world”,可以用一行代碼實現(xiàn): 你不需要為了輸入輸出或者字符...
    restkuan閱讀 3,368評論 0 6
  • 基礎(chǔ)部分(The Basics) 當推斷浮點數(shù)的類型時,Swift 總是會選擇Double而不是Float。 結(jié)合...
    gamper閱讀 1,503評論 0 7
  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,704評論 9 118
  • 常量與變量使用let來聲明常量,使用var來聲明變量。聲明的同時賦值的話,編譯器會自動推斷類型。值永遠不會被隱式轉(zhuǎn)...
    莫_名閱讀 537評論 0 1

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