Swift:如何透過引用傳遞陣列?


在 Swift 中,您可以使用 `inout` 關鍵字將陣列作為函式引數透過引用傳遞。在 Swift 中,陣列預設是值型別。換句話說,它們傳遞的是值而不是引用。如果您將陣列作為引數傳遞給函式,它會建立一個副本並將該副本傳遞給函式。

首先,讓我們瞭解一下當我們將陣列作為值傳遞給函式時會發生什麼。

func passByValue(_ array: [Int]) {
   array.append(100)
}
let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
passByValue(numbers)

當您執行上述程式碼時,您將收到如下所示的錯誤 -

error: cannot use mutating member on immutable value: 'array' is a 'let' constant

毫無疑問,這個錯誤會發生。您可以看到,當陣列作為引數傳遞給函式時,它預設是一個常量。

但是,如果您想透過引用傳遞陣列,則可以在 Swift 中使用 `inout` 引數。`inout` 引數允許您將值作為引用而不是其值的副本傳遞。

步驟 1 - 在此示例中,我們建立了一個名為 `passByReference` 的函式,該函式將採用名為 `array` 的 `inout` 引數。

步驟 2 - 此陣列是傳遞作為引數的原始陣列的引用。

步驟 3 - 該函式將值 100 附加到陣列的末尾,並且當函式返回時,原始陣列已修改。

步驟 4 - 要使用 `inout` 引數透過引用傳遞陣列,在呼叫函式時,必須在引數名稱前加上一個與號(&)。

示例

以下是如何透過引用傳遞陣列的示例 -

func passByReference(_ array: inout [Int]) {
   array.append(100)
}
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("Original array: \(numbers)")
passByReference(&numbers)
print("Modified array: \(numbers)")

輸出

Original array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Modified array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 100]

示例

以下是如何透過引用的另一個示例

func passByReference(_ array: inout [Int]) {
   array = array.map { element in element + 1 }
}
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("Original array: \(numbers)") // print: Original array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
passByReference(&numbers)
print("Modified array: \(numbers)") // print: Modified array: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

輸出

Original array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Modified array: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

結論

陣列在 Swift 中預設是值型別,並且透過值傳遞。換句話說,當您將陣列傳遞給函式時,陣列會複製自身並將副本傳送到函式。您在函式內部進行的任何更改都不會反映到原始陣列。

要透過引用傳遞陣列,您可以使用 `inout` 引數。這使您能夠修改記憶體中的引數。它將反映函式外部的原始陣列。

更新於: 2023年4月11日

4K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.