Swiftジェネリックスは、コードが特殊化されインスタンス化時に生成されるC++テンプレートと似ていませんが、次のコードを特殊化する方法があります。特にSwiftジェネリックと特殊化
func X1<R>(i: R) {
print("R")
}
func X1(i: Int) {
print("Int")
}
func X2<R>(i: R) {
X1(i: i)
}
X2(i: "s")
X2(i: 1)
X1(i: "s")
X1(i: 1)
、私が見出力は次のようになります。
R
R
R
Int
しかし、私は本当にINTはX1のIntに特化するためのX1へX2コールをしたい:
R
Int
R
Int
私が知っています私は型としてIntを持つ別のX2を作成することでそれを行うことができますが、私はそれを避けることを望んでいました。 、それは私が専門的な種類の多くがあるかもしれないとして避けるためにしようとしているものだ -
EDIT回答の数は、特殊なタイプごとに処理を追加することを示唆している(すなわち、func X2(i: Int)
かやっ型キャストlet x = i as? Int
を追加)例えば:
func X1(i: Double) {
print("Double")
}
func X1(i: Bool) {
print("Bool")
}
func X1(i: Float) {
print("Float")
}
を私は "R"、 "R"、 "R"、 "INT" を得たテスト・スウィフトのすべてのバージョンに。 (Swift 3.0,3.0.1,3.1,3.1.1,4.0) – Palle
申し訳ありませんが、出力を修正しました。 – Joe