Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode Swift-[Int]不是@lvalue$T2的子类型_Xcode_Swift_Swift Playground - Fatal编程技术网

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

Xcode Swift-[Int]不是@lvalue$T2的子类型,xcode,swift,swift-playground,Xcode,Swift,Swift Playground,我试图在swift游乐场中执行简单的排序功能,但出现以下错误: Playground execution failed: error: <EXPR>:20:22: error: '[Int]' is not a subtype of '@lvalue $T2' swap(&a,k,j) //Here in &a 以及排序功能: func sort(inout a:[Int]) -> [Int]{ var j = 0 var k = 0

我试图在swift游乐场中执行简单的排序功能,但出现以下错误:

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

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
}
func sort(inout a:[Int])
sort(&arr)
println(arr)

中的本地参数
a

func sort(a:[Int])
默认情况下是一个常量。由于要修改传递的数组,因此 要以与
swap()
函数相同的方式将该参数声明为
inout

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
}
func sort(inout a:[Int])
sort(&arr)
println(arr)
此外,传递的数组必须是可变的:

当它作为参数传递时,必须在它前面加上符号and 对于in-out参数,表示该参数可由函数修改:

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
}
func sort(inout a:[Int])
sort(&arr)
println(arr)
还请注意

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

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

是的,这就是解决方案,我的数组被指定为常量(将其更改为var),通过传递其地址,它工作了。是的,我还添加了一个返回值并更正了排序。马上,但是要学究的话:传递
&arr
不会传递
arr
的地址-它只是将
arr
包装为
inout
表达式,以便与
inout
函数参数一起使用。Swift中没有直接的内存地址引用。@rickster:你完全正确,谢谢我认为在某些情况下,地址是被接受的,例如,当作为参数传递给UnsafeMutablePointer参数时,但这不适用于这里。对——处理原始内存地址是一种(特殊情况)库功能,而不是核心语言功能。(另一方面,super secret
inout
菜单包含类似于能够
交换计算属性的值这样的处理—绝对不是指针的东西。)新的sort()函数对传递的数组进行排序并返回它。通常,您可以对传递的数组进行排序并不返回任何内容,或者保持传递的数组不变并返回已排序的数组。在第二种情况下,不需要inout参数。