我试图在一个快速的操场上执行一个简单的排序函数,但是我得到了以下错误:

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")

最佳答案

局部参数ain

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()没有返回值。

关于xcode - Swift-[Int]不是@ lvalue $ T2的子类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25814600/

10-10 21:33