我试图将类型存储在变量中,以便以后可以像第一类类型一样使用它。
class SomeModel {}
let someType = SomeModel.self
let array = Array<someType>()
在这种情况下,可以确定我可以Array<SomeModel>()
代替,但我想对其进行概括,让子类提供的值someType
。
不过,我得到这样的错误,someType isn't a type
或者use of undeclared type 'someType'
在最后一行。
func someFunc<T>(model: T) -> Array<T> {
let array = Array<T>()
return array
}
let someType = SomeModel.self
let array = someFunc(someType())
看起来这就是我想要的。唯一的缺点是我必须创建所需类型的实例才能通过。在这种情况下,它的开销很小,但是看起来很浪费。
使用这样的泛型的另一件事是,似乎泛型的可能类型是在编译时计算的,因此在运行时model.dynamicType
不一定匹配T
。在大多数情况下,它会,但是如果您正在做任何反射驱动的工作,请确保确实检查用例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句