我写了一个交换数组元素的函数。但它返回错误: 游乐场执行失败:: 21:5:错误:'@lvalue $ T8'与'T'不同 data [i] = data [j] ^ :22:5:错误:'@lvalue $ T5'与'T'不同 data [j] = temp ^
代码如下:
func exchange<T>(data: [T], i:Int, j:Int) {
let temp:T = data[i]
data[i] = data[j]
data[j] = temp
}
答案 0 :(得分:8)
您可以这样做:
swap(&data[i], &data[j])
如果你想写一个通用函数,那就是:
func exchange<T>(inout data: [T], i: Int, j: Int) {
swap(&data[i], &data[j])
}
var array = ["a", "b", "c", "d"]
exchange(&array, 0, 2)
array // ["c", "b", "a", "d"]
答案 1 :(得分:1)
data
必须是inout
参数:
func exchange<T>(inout data: [T], i:Int, j:Int) {
let temp:T = data[i]
data[i] = data[j]
data[j] = temp
}
您可以这样称呼:
var array = [1,2,3]
exchange(&array, 0, 2)
请参阅swift编程指南中的in-out parameters。