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` 引數。這使您能夠修改記憶體中的引數。它將反映函式外部的原始陣列。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP