我正在尝试学习如何使用Swift中的泛型工具做一些简单的事情。我煮了一个问题,我正面对一个简单的谜题。想象一下,我想编写一个值类型Pair<A,B>
,其上有一个flip
方法,返回该对的副本,但两个值(及其类型)相反。
struct Pair<A, B> {
let a: A
let b: B
init(first: A, second:B) {
a = first;
b = second;
}
func flip() -> Pair<B,A> {
return Pair(self.b,self.a)
}
}
当我写这篇文章时,我在线路上遇到错误,我正在尝试返回新的翻转对。 Cannot convert the expression's type 'Pair<A,B>' to type (first: A, second: B)'
我正在尝试做甚么可能吗?
答案 0 :(得分:5)
当然这是可能的,因为Pair<B,A>
在通用定义的上下文中是完全有效的类型。
您的代码存在两个问题,即:
init方法需要参数标签:...(first: self.b, second: self.a)
。
在解决上述问题后,错误变为&#34;&#39; B&#39;不能转换为&#39; A&#39;&#34;。编译器显然不会推断Pair
定义中的flip()
引用Pair<B,A>
(函数的返回类型)而不是Pair<A,B>
。因此,您必须明确调用Pair<B,A>(first: self.b, second: self.a)
。
您可能会或可能不会认为后者是一个错误;如果是,file a report!