2015-11-05 61 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 
} 

希望這有助於!