简单的Swift泛型拼图

时间:2014-07-18 00:32:35

标签: generics swift

我正在尝试学习如何使用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)'

我正在尝试做甚么可能吗?

1 个答案:

答案 0 :(得分:5)

当然这是可能的,因为Pair<B,A>在通用定义的上下文中是完全有效的类型。

您的代码存在两个问题,即:

  1. init方法需要参数标签:...(first: self.b, second: self.a)

  2. 在解决上述问题后,错误变为&#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)

  3. 您可能会或可能不会认为后者是一个错误;如果是,file a report!