我无法使用泛型(和通用协议)快速解决类型冲突。尝试在运算符函数中调用类函数时,我不断收到此错误。
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
}
类型相同,运算符只是静态类函数的语法糖。我不正确地使用通用协议吗?或者这是一个类型系统错误?我只需要将类函数代码复制到操作员代码中吗?
答案 0 :(得分:0)
回答了我自己的问题:我只需要为类函数调用Chain.append(chain:c,element:e)提供类型签名。
这通过为方法调用提供上下文来解决问题。之前它不知道它应该返回什么类型。