除了Swift,我已经解决了这个问题。如何在泛型中使用Type
变量?
我尝试过这样做:
func intType() -> Int.Type {
return Int.self
}
func test() {
var t = self.intType()
var arr = Array<t>() // Error: "'t' is not a type". Uh... yeah, it is.
}
这个也没用:
var arr = Array<t.Type>() // Error: "'t' is not a type"
var arr = Array<t.self>() // Swift doesn't seem to even understand this syntax at all.
有办法做到这一点吗?我感觉Swift不支持它,并且给了我一些模糊的错误信息。
编辑:这里是一个更复杂的例子,无法使用通用函数头绕过问题。当然这没有意义,但我在我的代码中有一个合理的使用这种功能的地方,而不是发布我的实际代码的干净示例。
func someTypes() -> [Any.Type] {
var ret = [Any.Type]()
for (var i = 0; i<rand()%10; i++) {
if (rand()%2 == 0){ ret.append(Int.self) }
else {ret.append(String.self) }
}
return ret
}
func test() {
var ts = self.someTypes()
for t in ts {
var arr = Array<t>()
}
}