在函式主體內,參數會被視為常數,而不是變數;若試圖修改參數的值,會引發編譯時期的錯誤。 如果函式想要修改某個參數的值,就必須使用 in-out 參數,明確表達這種可變性。
要使用 in-out 參數,程式設計者必須確認 3 件事:
inout寫在:與型別名稱之間。&,明確標示它是可修改的。完成這些之後,函式會為 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)`會引發編譯器錯誤。