无法在完成处理程序

时间:2017-06-04 14:08:55

标签: swift generics

我试图定义一个通用类型函数,但是当我尝试调用此函数时,我得到Generic parameter 'T' could not be inferred

这是我的代码

func getBalance<T: BalanceListConstructable>(type: MarketType, completion:
 @escaping ((T) -> Void), failure: ((Error)  -> Void)?) where T : BalanceListConstructable  {    }

然后我使用

调用此函数
getBalance(type: type, completion: { (result) in }) { (error) in}

但是这会给出上面的编译器错误。值得一提的是BalanceListConstructable。我需要这个是协议,因为不同的类型需要调用这个函数,因此我不能明确指定类型。

编辑1以下是有关我的方案的更多详细信息

类型:ListA和ListB都符合协议BalanceListConstructable,该协议为两个类定义了自定义初始值设定项。

我想发出网络请求并根据调用者初始化完成处理程序的结果,这样如果调用ListA类型,则调用ListA的初始化程序等等

这是我的实施:

我首先定义BalanceListConstructableListA应符合的协议ListB

protocol BalanceListConstructable {
init(json:JSON,header:[AnyHashable : Any]?) throws}

然后我像这样实现我的功能

func getBalance<T>(type:MarketType,completion: @escaping ((T) -> 
Void),failure: ((Error) -> Void)?) where T:BalanceListConstructable

通过执行此操作,我跳跃到能够基于调用者访问初始化程序,因此我需要初始化像这样的ListA对象

try T(json:JSON,header:[AnyHashable : Any]?)

在这种情况下,可以是ListAListB但是在我的所有方法中,我无法让编译器理解ListAListB来电者。这有可能吗?

0 个答案:

没有答案