【问题标题】:Swift wildcard in generics泛型中的 Swift 通配符
【发布时间】:2014-07-08 17:07:51
【问题描述】:

我目前正在进行的项目使用了很多泛型。我在尝试使用通配符时遇到问题。

在 Java 中我可以做到:

public class testGeneric<T> {

}
public class testing {
    public <T> void test (testGeneric<T> input) {
          testGeneric<?> testOne = input;
    }
}

没有任何错误。

在 Swift 中,我使用的是 AnyObject(因为它是所有对象的基础,所以我认为它可以以相同的方式使用)。

但是,以下会引发错误(特别是“T 与 AnyObject 不同”):

class testGeneric<T> {

}

class testing {
    func test <T> (input: testGeneric<T>) {
        var testOne: testGeneric<AnyObject> = input
    }
}

经过一番搜索,我发现 Swift 中有“通配符模式”(特别是“_”)。但是,这似乎不适用于泛型。

有没有办法解决这个问题?

提前致谢。

【问题讨论】:

  • AnyObject 不包括结构和原语。你可以试试Any,而不是除了函数之外的所有东西都符合,但我不确定这会起作用
  • @connor 我试过使用 Any,不幸的是它有同样的问题。
  • 是的。您可能想尝试使用演员表。 if let var testOne: testGeneric&lt;Any&gt; = input as? testGeneric&lt;Any&gt; { /*code */ } 请注意,这确实意味着如果 T 是函数类型,它将不起作用
  • @connor 不幸的是,强制转换会引发相同的错误。感谢您抽出宝贵时间考虑
  • 你到底想做什么?将任何 testGeneric 实例传递给测试?

标签: generics swift wildcard


【解决方案1】:

我认为您正在寻找的是:

class testGeneric<T> {
}

class testing {
    func test <T> (input: testGeneric<T>) {
        var testOne: testGeneric<T> = input
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2011-11-12
    相关资源
    最近更新 更多