我有两个不同类型的数组。其中一个继承了一些变量并扩展了它们。我想把第一个数组追加到第二个数组,但我得到了这个错误:
No exact matches in call to instance method 'append'
这是类的样子:
class FirstModel {
let name: String
let id: Int
}
class SecondModel: FirstModel {
let number: Int
}
以下是数组:
var firstArray: [FirstModel] = []
var secondArray: [SecondModel] = []
在视图中有一个附加它们的按钮(这里是错误):
Button("Do something") {
secondArray.append(contentsOf: firstArray)
}
I've seen this,但是在我的情况下,你如何解码数组来做同样的事情呢?
3条答案
按热度按时间rdrgkggo1#
如前所述,您可以使用一个协议来表示两个模型的共同行为。
xpszyzbs2#
问题是不是所有的
FirstModel
都是SecondModel
。因此,将FirstModel
s添加到只能存储SecondModel
s的数组中没有意义。如果希望
secondArray
能够存储FirstModel
s和SecondModel
s,则应将其类型设置为[FirstModel]
。然后在你的应用程序中你可以写一些类似于另一种解决方案是将
secondArray
保留为[SecondModel]
,但将附加代码更改为:这种方法只从
firstArray
中提取实际上是SecondModel
s的元素。查看compactMap
here的文档。我不知道哪种解决方案最适合你,因为这取决于你想要什么样的行为,但我希望这对你有帮助!
umuewwlo3#
简单的解决方案是将
secondArray
的元素添加到firstArray
中,因为SecondModel
继承自FirstModel
或创建新阵列
如果必须是
secondArray
来保存所有元素,则需要将其定义更改为