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 中,数组默认采用值传递,并通过值传递。换句话说,当你将数组传递给函数时,该数组会复制自身并将副本发送给函数。你在函数内部所做的任何更改都不会反映到原始数组上。
要通过引用传递数组,你可以使用输入参数。这允许你在内存中修改参数。它将反映函数外部的原始数组。