通用类型数组不将空数组作为输入

时间:2016-07-22 13:07:05

标签: arrays swift swift2

import Foundation


func insertionSort<T where T: Comparable>(var items:[T])-> [T] {

    for (index, _) in items.enumerate().dropFirst() {
        var j = index

        while ((j > 0) && (items[j] < items[j-1])) {
            swap(&items[j], &items[j-1])
            j = j-1
        }
    }
    return items
}


// Test the function
insertionSort([]) // Generic type array is not taking empty array

当我尝试用空数组调用insertionSort时,我得到了

Cannot invoke 'insertionSort' with an argument list of type '([_])'

我无法弄清楚如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

要在Swift中调用泛型函数,Swift需要能够推断出通用参数。

向Swift提供类型信息的一种方法是使用中间变量。 (如Lu_的评论中所述。)

let arr: [Int] = []
let result = insertionSort(arr)

另一种方法是使用as

let result = insertionSort([] as [Int])

(请记住,var参数不会修改实际参数。它只是创建一个可变副本,但不会将其写回原始参数.Swift 3删除了var个参数,因为它是如此您可能需要将函数的返回值赋给变量。)