汎用パラメータをとる関数を変数に代入しようとしています。変数に汎用パラメータを持つ関数を代入する
私はクラス「ラウドスピーカー」を持っています。 saySomething関数は、パラメータとして、プロトコルSpeakProtocolに準拠した任意のオブジェクトを取るためのものです:
class Loudspeaker {
func saySomething<T:SpeakProtocol> (speaker:T) {
print("\(speaker.thinkOfSomethingToSay())")
}
}
protocol SpeakProtocol {
func thinkOfSomethingToSay() -> String
}
ThingSayerクラスがSpeakProtocolを実装しています
class ThingSayer:SpeakProtocol {
func thinkOfSomethingToSay() -> String {
return "Hello"
}
}
私はスピーカークラスの新しいメンバーを作成します。
var aLoudspeaker:Loudspeaker
そして、その関数の結果ではなくsaySomething関数を変数に代入したいと考えています:
var speakFunction = aLoudspeaker.saySomething
私はその後、ThingSayerを作成し、そのspeakFunctionに渡すことで、他の場所でこの関数を呼び出します。
:
var aSpeaker:Thingsayer
speakFunction(speaker:thingSayer)
問題は、この行を次のとおりです。私にエラーを与える
var speakFunction = aLoudspeaker.saySomething
: "汎用パラメータ 'T'を推論できませんでした。"
これで私はかなり長い間壁に頭を打ちました。私がやろうとしていることをする方法はありますか?
これは明らかに実例ですが、問題の要点は、ジェネリックパラメータを取る関数があり、その関数を変数に代入してコード内のどこかで呼び出すことです。どんな助けでも大歓迎です。
[[変数に汎用関数を割り当てることはできますか]](http://stackoverflow.com/questions/40694060/is-it-possible-to-assign-a-generic-function-to -a-variable) – dfri
はい、これは同じ問題のようです。 – Mike