我在一个类上有一个方法,我在其中使用UIViewController类型的泛型并符合协议。然而,当我从另一个类中调用这个公共方法时,我收到了#34;通用参数无法推断"。不知道为什么,因为我已经告诉该方法泛型类型。
public func mapBlocks<T: UIViewController where T: MyProtocol>(mapper:(name: String, obj: T ) -> ()) {
// do something
}
当我尝试从另一个类调用该方法时,会发生错误...
MyClass.mapBlocks { (name, obj) -> () in
// do something
}
答案 0 :(得分:1)
我知道这个问题很老,我真的希望你在过去的一年半里解决了这个问题。 ;-)但是对于每个再次遇到这个问题的人来说,这就是解决方案。
通过在调用方法时显式定义闭包参数的类型,您需要将T的类型传递给泛型方法。这是Swift3示例:
protocol MyProtocol {
}
class MyClass: UIViewController, MyProtocol {
}
func mapBlocks<T: UIViewController>(mapper: @escaping (String, T) -> ()) where T: MyProtocol {
}
mapBlocks { (name: String, obj: MyClass) in
}
希望这有帮助!