我正在尝试了解如何使用 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)'
我正在尝试做的事情是否可行?
最佳答案
当然这是可能的,因为Pair<B,A>
在通用定义的上下文中是完全有效的类型。
您的代码有两个问题,即:
您的初始化方法需要参数标签:
...(first: self.b, second: self.a)
.修复上述问题后,错误变为“‘B’无法转换为‘A’”。编译器显然没有推断出
Pair
在flip()
的定义中指Pair<B,A>
(函数的返回类型)而不是Pair<A,B>
.所以你必须显式调用Pair<B,A>(first: self.b, second: self.a)
.
您可能会或可能不会认为后者是一个错误;如果是这样,file a report!
关于generics - 简单的 Swift 泛型难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24815665/