使用泛型的基类的变量

时间:2017-05-29 01:56:18

标签: swift generics

我有一个抽象基类(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())

0 个答案:

没有答案