在应用程序中使用泛型有以下问题。如下所示,我的GeneralUpdate类强制T与Reading class的类型一致,但我不能在初始化器中分配类型Reading的变量(在GeneralUpdate类中标记为注释)
class Reading {
var readingDate: Date!
var enteredDate: Date!
init(readingDate: Date, endDate: Date) {
self.readingDate = readingDate
self.enteredDate = endDate
}
}
class GeneralUpdate<T: Reading> {
var readingType: ReadingType!
var dataSource: DataSource!
var readings: [T]
init(readingType: ReadingType, dataSource: DataSource, readings: [Reading]) {
self.readingType = readingType
self.dataSource = dataSource
self.readings = readings //produces error "Cannot assign value of type '[Reading]' to type '[_]'"
}
}
我不太清楚这是为什么。我需要reading属性是泛型的,因为它可以保存来自reading类的不同类型的读取。我对swift泛型还不太熟悉,我想知道如何正确地实现这个目标
最佳答案
您需要将readings
参数声明为[T]
。
class GeneralUpdate<T: Reading> {
var readingType: ReadingType
var dataSource: DataSource
var readings: [T]
init(readingType: ReadingType, dataSource: DataSource, readings: [T]) {
self.readingType = readingType
self.dataSource = dataSource
self.readings = readings
}
}
请去掉所有那些丑陋的隐藏的选项。