我正在使用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
为什么我不能以这种方式修改可变整数数组?
因为子例程参数是隐式定义的,let因此是不可变的。尝试将声明更改为:
let
func exchange<T>(inout data: [T], i: Int, j: Int) {
以及对以下内容的调用:
exchange(&date, 0, 2)
您也可以使用,var但这仅允许在子例程中修改数组。Beta 3的最大变化是使数组真正按值传递,而不是有时只是按值传递,而不是其余时间。
var