Swift:通过引用传递数组?

swiftserver side programmingprogramming更新于 2025/9/25 18:22:17

在 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 参数。输入参数允许您将值作为引用传递,而不是其值的副本。

步骤 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("原始数组:\(numbers)")
passByReference(&numbers)
print("修改后的数组:\(numbers)")

输出

原始数组:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
修改后的数组:[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("原始数组:\(numbers)") // 打印:原始数组:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
passByReference(&numbers)
print("修改后的数组:\(numbers)") // 打印:修改后的数组:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

输出

原始数组:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
修改后的数组:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

结论

在 Swift 中,数组默认采用值传递,并通过值传递。换句话说,当你将数组传递给函数时,该数组会复制自身并将副本发送给函数。你在函数内部所做的任何更改都不会反映到原始数组上。

要通过引用传递数组,你可以使用输入参数。这允许你在内存中修改参数。它将反映函数外部的原始数组。



相关文章



关于我们 | 隐私条款 | 学习路线
返回顶部