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 '([_])'
我无法弄清楚如何解决这个问题。
答案 0 :(得分:2)
要在Swift中调用泛型函数,Swift需要能够推断出通用参数。
向Swift提供类型信息的一种方法是使用中间变量。 (如Lu_的评论中所述。)
let arr: [Int] = []
let result = insertionSort(arr)
另一种方法是使用as
。
let result = insertionSort([] as [Int])
(请记住,var
参数不会修改实际参数。它只是创建一个可变副本,但不会将其写回原始参数.Swift 3删除了var
个参数,因为它是如此您可能需要将函数的返回值赋给变量。)