为什么不是'Int' - 'Int'类型的元素?

时间:2014-12-22 20:51:25

标签: swift

我试着写一个简单的冒泡排序功能:

func bubbleSort(array: [Int]) -> [Int] {
    while !isSorted(array) {
        for index in 1..<array.count {
            if array[index - 1] > array[index] {                
                let temp: Int = array[index]
                array[index] = array[index - 1]
                array[index - 1] = temp
            }
        }
    }

    return array
}

要检查,当数组被排序时,它使用:

func isSorted(array: [Int]) -> Bool {
    for index in 1..<array.count {
        if array[index - 1] > array[index] {
            return false
        }
    }

    return true
}

我使用http://swiftstub.com/编译代码,但它给了我以下错误消息:

<stdin>:17:17: error: '@lvalue $T11' is not identical to 'Int'
array[index] = array[index - 1]
^
<stdin>:18:17: error: '@lvalue $T8' is not identical to 'Int'
array[index - 1] = temp
^

(如果您想在网站上查看:http://swiftstub.com/385904096/


array[index]array[index - 1]如何不属于Int类型,它们甚至可能属于不同类型?

1 个答案:

答案 0 :(得分:1)

那是因为传递给函数的数组是不可变的。为了使其可变,您必须使用inout修饰符通过引用传递它:

func bubbleSort(inout array: [Int]) -> [Int] {

请注意,使用inout时,必须在调用函数时使用&运算符将相应的参数作为引用传递:

let res = bubbleSort(&myArray)

另请注意,要交换2个变量,您只需使用:

swap(&array[index], &array[index - 1])

建议阅读:In-Out Parameters