我试图使一个泛型类型的类型如下
class Cars<T> { ... } typealias SportCars = Cars
但是我正在收到一个编译错误,参考通用类型’Cars’需要< ...>中的参数.
现在,你已经发现,你不能用泛型进行这个操作.
typealias Foo = Array // Doesn't work: Reference to generic type 'Array' requires argument in <...>
Swift编程语言iBook章节“类型别名声明”实际上并没有说明哪些类型不能被别名.但它只是看起来像是不允许的部分类型(如没有指定占位符的泛型).
如果你觉得Swift应该做的这件事情,应该向苹果提交一个雷达(bugreport).
在研究这个答案的同时,我注意到部分类型的问题不仅影响类型,而且在其他地方也是可见的:
let foo = Array.self // Doesn't work: Cannot convert the expression's type 'Array<T>.Type' to type 'Array<T>.Type' // … which is a very confusing error. var bar: Array.Type // Doesn't work: Reference to generic type 'Array' requires arguments in <...> let bar: Array.Type = Array.self // …/usr/bin/swift: Segmentation fault! :-)
如果您指定占位符类型,则所有这些都可以工作:
typealias Foo = Array<Int> // Works let foo = Array<Int>.self // Works