在Swift中交换数组元素

时间:2014-08-22 04:10:03

标签: swift

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

2 个答案:

答案 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