Swift 3中仿制药的仿制药
我面临一个奇怪的问题:我希望用另一个泛型类型约束一个泛型类型 让我解释一下,我有一个简单的泛型类型:Swift 3中仿制药的仿制药,swift,generics,swift3,Swift,Generics,Swift3,我面临一个奇怪的问题:我希望用另一个泛型类型约束一个泛型类型 让我解释一下,我有一个简单的泛型类型: class Simple<T : Equatable> { ... } class Complex<U : Simple> { ... } // WRONG! 最糟糕的是,想象一下如果我有这样的事情: class SimpleThing : Simple<Thing> { ... } let y = Complex<Thing, SimpleThin
class Simple<T : Equatable> { ... }
class Complex<U : Simple> { ... } // WRONG!
最糟糕的是,想象一下如果我有这样的事情:
class SimpleThing : Simple<Thing> { ... }
let y = Complex<Thing, SimpleThing>()
只有Swift 3才有可能吗
提前感谢。如果我理解了您想要正确执行的操作,那么可以使用具有关联类型的协议来实现。您可以使您的简单类符合它,然后将Complex上的type参数约束为其符合类型,最后将限定放置在关联类型上。应该是这样的:
protocol SimpleType {
associatedtype Assoc
}
class Simple<T: Equatable>: SimpleType {
typealias Assoc = T
}
class Complex<U: SimpleType> where U.Assoc: Equatable {
init() {
}
}
let c = Complex<Simple<Date>>()
协议SimpleType{
关联类型
}
类Simple:SimpleType{
类型别名Assoc=T
}
类复杂,其中U.Assoc:可平衡{
init(){
}
}
设c=Complex()
谢谢,对于一个看似简单的问题来说,这是一个有点复杂的解决方案。无论如何,这样看待这个问题是非常有用的。
class Complex<T : Equatable, U : Simple<T>> { ... }
let x = Complex<Date, Simple<Date>>()
class SimpleThing : Simple<Thing> { ... }
let y = Complex<Thing, SimpleThing>()
let x = Complex<Simple<Date>>()
let y = Complex<SimpleThing>()
protocol SimpleType {
associatedtype Assoc
}
class Simple<T: Equatable>: SimpleType {
typealias Assoc = T
}
class Complex<U: SimpleType> where U.Assoc: Equatable {
init() {
}
}
let c = Complex<Simple<Date>>()