类型转换与swift中的通用协议冲突?

时间:2017-02-02 05:03:22

标签: swift generics types protocols

我无法使用泛型(和通用协议)快速解决类型冲突。尝试在运算符函数中调用类函数时,我不断收到此错误。

Cannot convert value of type 'Chain<Initial, E.Initial, E>'to expected argument of type 'Chain<Initial, E.Initial, E>'

下面是操作员功能签名和正文。该错误被声明为提供&#39; c&#39;到类功能。

public func +<Initial, E : Bindable>(c: Chain<Initial, E.Initial, E>, e: E) -> Chain<Initial, E.Result, E> {
return Chain.append(chain: c, element: e)
}

Chain类附加函数的函数签名(与操作符函数签名相同)是;

static func append<Initial, E : Bindable>(chain : Chain<Initial, E.Initial, E>, element: E) -> Chain<Initial, E.Result, E>

Bindable协议声明为;

public protocol Bindable {
    associatedtype Initial 
    associatedtype Result
}

类型相同,运算符只是静态类函数的语法糖。我不正确地使用通用协议吗?或者这是一个类型系统错误?我只需要将类函数代码复制到操作员代码中吗?

1 个答案:

答案 0 :(得分:0)

回答了我自己的问题:我只需要为类函数调用Chain.append(chain:c,element:e)提供类型签名。

这通过为方法调用提供上下文来解决问题。之前它不知道它应该返回什么类型。