在Swift中交换数组元素

3
我写了一个函数来交换数组元素。但是它返回错误: Playground执行失败::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
}

1
可能是重复的问题:Swift数组可选类型和下标(Beta 3) - Martin R
2个回答

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
"

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 编程指南中的 输入输出参数

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接