我有一个抽象基类(DataSource,在我下面的简化场景中)和一些子类(IntSource和StringSource)。基类使用泛型。
我希望将一个变量(例如,currentDataSource)键入为基类,以便它可以引用任何子类的实例。不过,我无法弄清楚如何宣布它。声明需要一种能够立即打破抽象的具体类型。
class DataSource<Element> where Element:Equatable {
var elements = [Element]()
func description() {
print("must override")
}
}
class IntSource: DataSource<Int> {
override func description() {
print("Ints!")
}
}
class StringSource: DataSource<String> {
override func description() {
print("Strings!")
}
}
let a = IntSource()
let b = StringSource()
var current: DataSource<???> // this is where I'm stuck
current = a
print(current.description())
current = b
print(current.description())