一尘不染

Swift Array可选的类型和下标(测试版3)

swift

我正在使用2014年WWDC教程408:使用XCode Beta 3(30分钟)的Swift Playgrounds。自Beta
2起,Swift语法已更改。

var data = [27, 46, 96, 79, 56, 85, 45, 34, 2, 57, 29, 66, 99, 65, 66, 40, 40, 58, 87, 64]

func exchange<T>(data: [T], i: Int, j: Int) {
    let temp = data[i]
    data[i] = data[j]  // Fails with error '@lvalue $T8' is not identical to 'T'
    data[j] = temp     // Fails with error '@lvalue $T5' is not identical to 'T'
}

exchange(data, 0 , 2)
data

为什么我不能以这种方式修改可变整数数组?


阅读 216

收藏
2020-07-07

共1个答案

一尘不染

因为子例程参数是隐式定义的,let因此是不可变的。尝试将声明更改为:

func exchange<T>(inout data: [T], i: Int, j: Int) {

以及对以下内容的调用:

exchange(&date, 0, 2)

您也可以使用,var但这仅允许在子例程中修改数组。Beta 3的最大变化是使数组真正按值传递,而不是有时只是按值传递,而不是其余时间。

2020-07-07