gpt4 book ai didi

swift - 无法使用 BaseCellData 类型的参数列表调用 'insert'

转载 作者:行者123 更新时间:2023-11-30 12:26:29 25 4
gpt4 key购买 nike

构建 Swift 代码时出现此错误:

Cannot invoke 'insert' with an argument list of type '(BaseCellData, at: Int)' on the row

当我运行以下代码时:

public class CellDataCollection<T: BaseCellData> {
private var data = [T]()

func populate(from data: [T]) {
self.data = data
let firstObjectIsHeader = data.first?.isHeader ?? false
if !firstObjectIsHeader {
let newEmptyHeader = BaseCellData(isEmptyHeader: true)
self.data.insert(newEmptyHeader, at: 0)
}
// ...
}
}

我认为由于 T 是一个 BaseCellData,因此应该可以将 BaseCellData 的新实例添加到 T 的数组中。可能会出现什么问题?

最佳答案

您的 T 数组是一种特定类型,而 BaseCellData 则更为通用。

例如,假设您有以下类(class):

class Animal {}
class Dog: Animal {}
class Cat: Animal {}

你创建了一组狗,显然你不能向其中添加猫或动物

var dogs = [Dog]
dogs.append(Cat()) // Not allowed
dogs.append(Animal()) // Also not allowed

所以如果你有一个通用的:

class AnimalCollection<T:Animal> {
var animals: [T]
}

然后,如果您创建一个集合,则 T 的类型就是您定义为泛型类型的任何类型。所以对于:

let dogCollection: AnimalCollection<Dog>

该数组的类型为 Dog,正如我们在向其中添加动物或猫之前所看到的那样,这是不允许的。

关于swift - 无法使用 BaseCellData 类型的参数列表调用 'insert',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44134479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com