将具有通用参数的函数分配给变量

时间:2016-12-19 05:50:40

标签: swift generics

我正在尝试将一个带有泛型参数的函数赋给变量。

我有一个班级,扬声器,有功能,比如说。 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'。”

我一直在墙上撞墙一段时间。有没有办法做我想做的事情?

这显然是一个人为的例子,但问题的关键在于我有一个函数,它接受一个泛型参数,我想将该函数分配给一个变量,以便在我的代码中的其他地方调用。任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:1)

var speakFuction: (speaker: ThingSayer) -> Void = aLoudspeaker.saySomething

在声明变量以帮助编译器时,您需要明确函数的类型。