この意志ない作品:
func addThreeValues<T>(v1: T, _ v2: T, _ v3: T) -> T {
return v1 + v2 + v3
}
コンパイラはT
秒で動作する任意の+
オペレータについて知らないので。
適切な+
演算子が見つかるように、に汎用パラメータを指定する必要があります。IntegerType protocolは1を提供しています。
func addThreeValues<T: IntegerType>(v1: T, _ v2: T, _ v3: T) -> T {
return v1 + v2 + v3
}
ただし、文字列がIntegerTypeプロトコルに準拠していない:
addThreeValues("a", "b", "c") // error: cannot invoke 'addThreeValues' with an argument list of type '(String, String, String)'
この問題を回避するために独自のプロトコルを定義し、あなたがしたい方のタイプの不適合を提供することができ使用:
protocol Addable {
func +(lhs: Self, rhs: Self) -> Self
}
extension String: Addable {}
extension Int: Addable {}
func addThreeValues<T: Addable>(v1: T, _ v2: T, _ v3: T) -> T {
return v1 + v2 + v3
}
今、この作品:
addThreeValues(1, 2, 3) // returns 6
addThreeValues("a", "b", "c") // returns "abc"
なぜお望みですか?あなたの目標は何ですか? – jtbandes
私は同じことをする2つの異なる機能を持っているので。 1つは文字列を一緒に追加し、もう1つは整数です。私はそれをやる方法を学びたいと思う。ありがとう – SteveSmith
StringとIntの両方の+機能をサポートする組込みプロトコルはありません。自分で定義する必要があります。 – jtbandes