generics - 简单的 Swift 泛型难题

标签 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)'

我正在尝试做的事情是否可行?

最佳答案

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

您的代码有两个问题,即:

  1. 您的初始化方法需要参数标签:...(first: self.b, second: self.a) .

  2. 修复上述问题后,错误变为“‘B’无法转换为‘A’”。编译器显然没有推断出 Pairflip() 的定义中指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/

相关文章:

ios - Firebase setValue 在 IOS 10、Swift 3 中不起作用

ios - 搜索数组以查找提供类型的对象

swift - 升级到 Xcode 8 并转换为 Swift 3 后核心数据出错

ios - 显示来自 URL 的文件

java - 使用mockito模拟具有通用返回类型的方法

java - 通用对象链表 (Java)

C# 不寻常的继承语法 w/generics

generics - dart,为什么我不能在方法上使用泛型

java - 什么是原始类型,为什么我们不应该使用它呢?

ios - 重新加载带有动画的表格 View 单元格(Swift)