我正在尝试将一个带有泛型参数的函数赋给变量。
我有一个班级,扬声器,有功能,比如说。 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"
}
}
我创建了一个Loudspeaker类的新成员:
var aLoudspeaker:Loudspeaker
我想将saySomething函数(不是该函数的结果)赋给变量:
var speakFunction = aLoudspeaker.saySomething
然后我会通过创建ThingSayer并将其传递给speakFunction来调用此函数:
var aSpeaker:Thingsayer
speakFunction(speaker:thingSayer)
问题在于这一行:
var speakFunction = aLoudspeaker.saySomething
这给了我一个错误:“无法推断出通用参数'T'。”
我一直在墙上撞墙一段时间。有没有办法做我想做的事情?
这显然是一个人为的例子,但问题的关键在于我有一个函数,它接受一个泛型参数,我想将该函数分配给一个变量,以便在我的代码中的其他地方调用。任何帮助都将非常感激。
答案 0 :(得分:1)
var speakFuction: (speaker: ThingSayer) -> Void = aLoudspeaker.saySomething
在声明变量以帮助编译器时,您需要明确函数的类型。