在应用程序中使用泛型有以下问题。如下所示,我的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
    }
}

请去掉所有那些丑陋的隐藏的选项。

10-05 23:00