Swift - [Int]不是@lvalue $ T2的子类型

时间:2014-09-12 18:30:44

标签: xcode swift swift-playground

我正在尝试在快速游乐场中进行简单的排序功能,但是我收到以下错误:

Playground execution failed: error: <EXPR>:20:22: error: '[Int]' is not a subtype of '@lvalue $T2'
            swap(&a,k,j) //Here in &a

我写了以下代码:

let arr:[Int] = [1,3,53,24,52,1,234,5,3]

func swap(inout a:[Int], num1:Int, num2:Int){
    var value = a[num1]
    a[num1] = a[num2]
    a[num2] = value
}

func sort(a:[Int]){
    var j = 0
    var k = 0
    for (k = j ; k<=a.count; k++){
        if(k != a.count){
            if(a[k] < a[j]){
                swap(&a,k,j)
            }
        }else{
            j++;
        }
    }
 }

print ("\(sort(arr)) is the array")

知道为什么这不起作用?我错误地引用了数组,谢谢!

更新: 正如Martin R指出错误,这里是更正后的代码:

var arr:[Int] = [1,3,53,24,52,1,234,5,3]

排序功能:

func sort(inout a:[Int]) -> [Int]{
var j = 0
var k = 0
for (k = j ; k <= a.count; k++){
    if(k != a.count){
        if(a[k] < a[j]){
            swap(&a,j,k)
        }
    }else{
        j++;
        k = j
    }
}
    return a
}

最后:

print ("\(sort(&arr)) is the array")

1 个答案:

答案 0 :(得分:2)

中的本地参数a
func sort(a:[Int])

默认为常量。既然你想修改传递的数组,你就有了 以inout函数中的相同方式将该参数声明为swap()

func sort(inout a:[Int])

此外,传递的数组必须是变量

var arr:[Int] = [1,3,53,24,52,1,234,5,3]

并且当它作为参数传递时,你必须在它前面添加&符号 对于输入输出参数,表示可以通过函数修改它:

sort(&arr)
println(arr)

另请注意

print ("\(sort(arr)) is the array")

不会打印数组结果,因为sort()没有返回值。