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
构造函数时将其用作参数