2016-07-22 12 views
2
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 

を空の配列を取ることはありません、私はこの問題を解決する方法を把握することはできませんよジェネリック型配列が入力として

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

を取得します。

+0

@Lu_配列に変更を加えるため、 'items'に' var'が必要です。 – Rahul

+0

let tab:[String] = [] スワイプの配列型が宣言されている必要があります。 –

答えて

2

Swiftで汎用関数を呼び出すには、Swiftが汎用パラメータを推測できる必要があります。

Swiftにタイプ情報を与える1つの方法は、中間変数を使用しています。 (等がLu_さんのコメントで述べた。)

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

もう一つの方法は、asを使用しています。

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

varパラメータは、実際の引数を変更しないことを覚えておいてください。それだけで変更可能なコピーを作成しますが、元の引数にそれを書き込みません。3スウィフトは、それはとても混乱だとして、varパラメータを削除しました。あなたがかもしれません関数の戻り値を変数に代入する必要があります。

関連する問題