軌道
/
Swift
Swift
/
課程大綱
/
inout 參數
in

inout 參數 在 Swift

1 個練習

關於 inout 參數

在函式主體內,參數會被視為常數,而不是變數;若試圖修改參數的值,會引發編譯時期的錯誤。 如果函式想要修改某個參數的值,就必須使用 in-out 參數,明確表達這種可變性。

要使用 in-out 參數,程式設計者必須確認 3 件事:

  1. 函式定義必須明確標示 in-out 參數:在參數的型別標註中,把關鍵字inout寫在:與型別名稱之間。
  2. 傳入 in-out 參數的值必須宣告為變數,而不是常數。同樣地,它也不能是字面值。
  3. 在呼叫函式時,變數名稱前面必須加上&,明確標示它是可修改的。

完成這些之後,函式會為 in-out 參數建立一份內部副本,依照函式主體中的指示修改它,然後在函式回傳時,把修改後的值複製回傳入的那個變數。

func updateVersion(_ record: inout (version: Int, title: String)) {
  record.version += 1
}

var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)

// dbRecord is now (3, "Exercism")
關於 in-out 參數,還有幾條額外的規則需要注意。

1. 在有 in-out 參數的函式內部,你不能參照當初傳入作為 in-out 參數的那個變數。
2. 同一個變數不能在同一函式中作為多個 in-out 參數傳入。
   例如,`inoutFunc(&mutVar, &mutVar)`會引發編譯器錯誤。
透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 inout 參數