【发布时间】:2016-11-22 21:21:07
【问题描述】:
我遇到了一个奇怪的问题,这里是:我希望用另一种泛型类型来约束一个泛型类型。
让我解释一下,我有一个简单的泛型类型:
class Simple<T : Equatable> { ... }
而且我希望用这个简单(泛型)类型有另一个泛型类型约束:
class Complex<U : Simple> { ... } // WRONG!
当然那不编译也不这样:
class Complex<U : Simple<T : Equatable>> { ... } // WRONG!
也不:
class Complex<U : Simple<T>> where T : Equatable { ... } // WRONG!
我找到的唯一方法是:
class Complex<T : Equatable, U : Simple<T>> { ... }
所以我需要在每个实例上重复T:
let x = Complex<Date, Simple<Date>>()
最糟糕的是,想象一下,如果我有类似的东西:
class SimpleThing : Simple<Thing> { ... }
let y = Complex<Thing, SimpleThing>()
我如何声明Complex 以这种方式使用它?:
let x = Complex<Simple<Date>>()
let y = Complex<SimpleThing>()
只有在 Swift 3 中才有可能吗?
提前致谢。
【问题讨论】: