我试图在一个快速的操场上执行一个简单的排序函数,但是我得到了以下错误:
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")
最佳答案
局部参数a
in
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/