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.