2015-11-05 74 views
2

我有一个类的方法,我在其中使用类型为UIViewController并符合协议的泛型。然而,当我从另一个类中调用这个公共方法时,我收到了“通用参数无法推断”。不知道为什么我已经告诉过这种方法的泛型类型。通用参数无法推断

public func mapBlocks<T: UIViewController where T: MyProtocol>(mapper:(name: String, obj: T) ->()) { 
    // do something 
} 

错误发生在这里,当我尝试从另一个调用类的方法...

MyClass.mapBlocks { (name, obj) ->() in 
    // do something 
} 

回答

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 
} 

希望这有助于!

相关问题