【发布时间】: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<Any> = input as? testGeneric<Any> { /*code */ }请注意,这确实意味着如果 T 是函数类型,它将不起作用 -
@connor 不幸的是,强制转换会引发相同的错误。感谢您抽出宝贵时间考虑
-
你到底想做什么?将任何 testGeneric 实例传递给测试?