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