【发布时间】:2015-06-18 01:25:19
【问题描述】:
我有this question,除了 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>()
}
}
【问题讨论】: