1

スイフト3、Xcode8β2。
Comparable データをソートするクラスを実装し、Double を使用してテストしようとしました。残念ながら、エラーが発生しています"Cannot convert value of type '[Double]' to specified type '[T]'."。以下のサンプル コードでエラーを再現しました。

class foo<T: Comparable> {
    let data: [T]  = [Double]()
}

Doubles が Comparable であると仮定するのは正しいですか? もしそうなら、どうすれば上記のエラーを解消できますか?
どうも。

4

2 に答える 2

1

このコードの問題

class Foo<T: Comparable> {
    let data: [T]  = [Double]()
}

である必要があるジェネリック型dataとして宣言したことです。type の任意の値を含むことができることを意味します。Andは、クラスの使用時に定義されます。ComparableTT

Foo<String>()
Foo<Double>()
Foo<Bool>()

上記の例を見てください。最初のケースTではString. この情報により、この行がコンパイルできないことは明らかです。

let data: [T]  = [Double]()

書くのと同じだから

let data: [String]  = [Double]()

それは明らかに間違っています。

解決

@Eric Dによってすでに提案されているように。

class Foo<T: Comparable> {
    let data: [T]  = []
}

これで、正しい型の空の配列がデータに取り込まれます。

だからこの場合

Foo<String>()

の配列ですString

この場合

Foo<Double>()

の配列が取り込まれDoubleます。

そして最後にこの場合

Foo<Bool>()

の配列でBool

于 2016-07-12T12:22:32.227 に答える
0

プロパティにジェネリック型がありTます: 具象型を保持していると宣言することはできません。[T]宣言で使用するだけでDouble、クラスをインスタンス化するときに使用します。

私の例では、プロパティを var にして、変更できるようにしました。

class Foo<T: Comparable> {
    var data: [T] = [T]()
}

let f = Foo<Double>()
f.data = [42.0, 33.0]
f.data.sort()
print(f.data)

与える

[33.0、42.0]

予想通り。

于 2016-07-12T12:16:32.150 に答える