Ios 在数组中添加对象会在swift中创建重复的值
我有一个自定义对象数组,但当我将项添加到数组中时,它会创建上一个项加载项数组的副本。 下面是我的代码,请建议哪里是错误的,这个小东西不能得到它Ios 在数组中添加对象会在swift中创建重复的值,ios,arrays,swift,duplicates,Ios,Arrays,Swift,Duplicates,我有一个自定义对象数组,但当我将项添加到数组中时,它会创建上一个项加载项数组的副本。 下面是我的代码,请建议哪里是错误的,这个小东西不能得到它 var tempArr:[AnimalViewModel] = [AnimalViewModel]() do { var objAnimal = Animal() var result = try managedContext.fetch(fetchRequest)
var tempArr:[AnimalViewModel] = [AnimalViewModel]()
do {
var objAnimal = Animal()
var result = try managedContext.fetch(fetchRequest)
for ds in result as! [NSManagedObject] {
objAnimal.name = (ds.value(forKey: "name")) as! String
objAnimal.type = (ds.value(forKey: “type”)) as! String
Var objAVM = AnimalViewModel(aniModel: objAnimal)
tempArr.append(objAVM)
}
} catch {
print(" Error ")
}
数组tempArr包含与最后插入的元素相同的所有重复元素,即使objAnimal包含不同的值
谢谢,首先,不要在catch块中打印像
“Error”
这样无意义的文本字符串。始终打印错误
实例
Animal
显然是一个类(参考类型)。您正在创建一个实例,并在循环中更新属性。一如既往地使用相同的实例,这些值将被覆盖,您将得到result.count
具有相同内容的项
在循环内创建新实例,并用真实实体名称替换实体
var tempArr = [AnimalViewModel]()
do {
let result = try managedContext.fetch(fetchRequest) as! [Entity] // let !
for ds in result {
let objAnimal = Animal() // let !
objAnimal.name = ds.name
objAnimal.type = ds.type
let objAVM = AnimalViewModel(aniModel: objAnimal) // let !
tempArr.append(objAVM)
}
} catch {
print(error)
}
请注意并修复关于永不突变变量的警告每次在
for
循环中创建一个新的动物
。更好的方法是让fetch请求返回实体类的数组,并在调用AnimalViewModel
构造函数时将其用作参数