首页 > 解决方案 > 在数组中添加对象会在 swift 中创建重复值

问题描述

我有一个自定义对象数组,但是当我将项目添加到数组时,它会创建最后一项添加到数组中的副本。下面是我的代码,请指点错误在哪里,这个小东西搞不定。

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 包含不同的值。

谢谢,

标签: iosarraysswiftduplicates

解决方案


首先,永远不要像"Error"在 catch 块中那样打印无意义的文字字符串。始终打印error实例。

Animal显然是一个类(引用类型)。您正在创建一个实例,并且属性会在循环中更新。与往常一样,使用相同的实例,值将被覆盖,您将获得result.count具有相同内容的项目。

在循环内创建新实例并替换Entity为真实实体名称

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)
}

并且请注意并修复关于从未变异变量的警告


推荐阅读