Swift 使用泛型的基类的变量

Swift 使用泛型的基类的变量,swift,generics,Swift,Generics,我有一个抽象基类(DataSource,在下面的简化场景中)和少数子类(IntSource和StringSource)。基类使用泛型 我希望将一个变量(比如currentDataSource)类型化为基类,以便它可以引用任何子类的实例。不过我不知道怎么申报。声明需要一个具体的类型,该类型会立即中断抽象 class DataSource<Element> where Element:Equatable { var elements = [Element]() func

我有一个抽象基类(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())
类数据源,其中元素:equalable{
变量元素=[Element]()
func description(){
打印(“必须覆盖”)
}
}
类IntSource:数据源{
重写函数描述(){
打印(“Ints!”)
}
}
类StringSource:数据源{
重写函数描述(){
打印(“字符串!”)
}
}
设a=IntSource()
设b=StringSource()
var current:DataSource//这就是我被卡住的地方
电流=a
打印(当前.description())
电流=b
打印(当前.description())

DataSource
作为具有关联类型的协议更具意义。从那里你可以制作一个类型的橡皮擦,
AnyDataSource
,这就是你想要的。我花了一天的时间研究这个方向,最后也遇到了同样的问题。使用这里的游乐场:,我尝试了
var pokemon:AnyPokemon=AnyPokemon(Pikachu())
然后是
pokemon=AnyPokemon(Charmander())
,但失败了。你必须做一个修改:
AnyPokemon
不能是通用的,它只将变量存储为
Any
而不是泛型类型
T
DataSource
作为具有关联类型的协议更有意义。从那里你可以制作一个类型的橡皮擦,
AnyDataSource
,这就是你想要的。我花了一天的时间研究这个方向,最后也遇到了同样的问题。使用这里的游乐场:,我尝试了
var pokemon:AnyPokemon=AnyPokemon(Pikachu())
然后是
pokemon=AnyPokemon(Charmander())
,但失败了。你必须做一个修改:
AnyPokemon
不能是通用的,它只将变量存储为
Any
,而不是泛型
T