2016-04-24 4 views
3

は、私はスウィフトコード(ジェネリック医薬品)の以下の部分はコンパイルできない理由を理解するのに苦労していますというのは、Tは、制約(<T>)を入れず、arrayArray<T>と宣言しているジェネリック型です。しかし、これは次のエラーを生成します:スウィフトジェネリック:</p> <pre><code>func backwards<T>(array: [T]) -> [T] { let reversedCollection = array.sort(>) return reversedCollection } </code></pre> <p>を、私はそれを理解する方法を:C++背景(テンプレート)から来る制約引数の型

Ambiguous reference to member 'sort()'

私は制約がプロトコルを使用してジェネリック型に置くことができることを理解します。しかし、この場合、私はTに何も拘束したくありません。むしろ、最初のパラメータのタイプを制約したいと思います。

私は数時間前から一般的な種類のAppleのドキュメントを読んできましたが、私はそれほど賢明ではありません。私はこれが不可能であり、制約は宣言された型だけに置かれているという印象を持っていますが、それは私の知る限りです。

したがって、質問はです:可能であれば、関数引数の型に制約をどうやって入れますか?そうでない場合は、どのように私は同じ結果を達成するのですか?

答えて

3

sort(>)ElementComparableの場合にのみ有効です。 [T]の要素型のでTが配列[T]>経由でソート可能にするためにComparableに適合しなければならない、Tです:

func backwards<T: Comparable>(array: [T]) -> [T] { 
    let reversedCollection = array.sort(>) 

    return reversedCollection 
} 
+0

おかげで、これが実際に作業を行います。残念ながら、私はコンパイラのメッセージからそれを推論しませんでした。私はTと比較演算子に関係する何らかのエラーメッセージを期待していたでしょう。将来のデバッグ参照のために、これをもう少し明確にすることはできますか? – OnMyLittleDuck

+0

@OnMyLittleDuck実際、これはコンパイラ側で誤解が少なくなっています。 https://bugs.swift.orgでバグレポートを提出することをお勧めします。 –

関連する問題