Swift中泛型类的typealias

Swift中泛型类的typealias,swift,xcode6,Swift,Xcode6,我试图创建泛型类型类的typealias,如下所示 class Cars<T> { ... } typealias SportCars = Cars 等级车{ ... } typealias SportCars=汽车 但是我得到了一个编译错误,如下引用泛型类型“Cars”需要在中使用参数,我认为使用typealias和泛型最远的方法是创建一个专用类型的别名,例如: typealias SportsCar = Cars<Int> typealias Sports

我试图创建泛型类型类的typealias,如下所示

class Cars<T> {
  ...
}

typealias SportCars = Cars
等级车{
...
}
typealias SportCars=汽车

但是我得到了一个编译错误,如下
引用泛型类型“Cars”需要在

中使用参数,我认为使用
typealias
和泛型最远的方法是创建一个专用类型的别名,例如:

typealias SportsCar = Cars<Int>
typealias SportsCar=汽车
如果同一泛型类型需要不同的名称,可以将其子类化:

class SportCars<T> : Cars<T> {}
class跑车:汽车{}

它并不完全是一个别名(当需要
SportCars
时,您不能使用
Cars
,但可以使用相反的别名),但在“受控”环境中,它可以工作。不过我不会用我自己。

现在,你不能用泛型来做这件事,你已经发现了

typealias Foo = Array
// Doesn't work: Reference to generic type 'Array' requires argument in <...>
如果指定占位符类型,则所有这些操作都有效:

typealias Foo = Array<Int> // Works
let foo = Array<Int>.self // Works
typealias Foo=Array//Works
让foo=Array.self//工作

可能的解决方法是将类型别名包装到类/结构中:

struct SportCars<Y> {
  typealias T = Cars<Y>
}

/// Usage:
typealias Foo = SportCars<Int>.T
struct跑车{
类型别名T=汽车
}
///用法:
typealias Foo=跑车.T

什么是
?是否缺少代码?抱歉,这是由示例和打字错误造成的。但我的主要观点是如何生成泛型类的typealias不知道为什么这个问题被否决了?有人能解释一下吗?这里的typealias有什么意义?为什么不使用子类?typealias只是一个类的另一个名称,因为子类化不允许我在需要跑车的地方通过汽车。我不想指定类型。这将SportsCar仅限制为Int-generic类型。一个伪备选方案:您可以对包含相关类型要求的协议(即实现可以映射到泛型的嵌套
typealias
)创建一个
typealias
),但随后您会遇到这样的问题,Swift只允许您将此类协议用作泛型约束——本质上与尝试使用部分类型的问题相同。
struct SportCars<Y> {
  typealias T = Cars<Y>
}

/// Usage:
typealias Foo = SportCars<Int>.T