我正在关注 2014 WWDC 教程 408:使用 XCode Beta 3 的 Swift Playgrounds(30 分钟)。自 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
隐式定义的,因此是不可变的。尝试将声明更改为:
func exchange<T>(inout data: [T], i: Int, j: Int) {
以及调用:
exchange(&date, 0, 2)
您也可以使用 var
但这只允许在子例程中修改数组。 beta 3 的重大变化是让数组真正按值传递,而不是在某些时候只是按值传递,但在其余时间则不然。
关于arrays - Swift 数组可选类型和下标(Beta 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24710208/