Arrays Swift在将自定义类附加到数组时覆盖所有以前的值

Arrays Swift在将自定义类附加到数组时覆盖所有以前的值,arrays,swift,append,overwrite,Arrays,Swift,Append,Overwrite,我有一个名为Subject的自定义类,我试图初始化该类的版本并将其附加到数组中,但是当我将一个类附加到数组中时,它会覆盖其中所有准备就绪的主题。例如,此代码 var things:[Subject] = [] things.append(Subject(initName: "1", initTeacher: "1", initClassroom: "1")) things.append(Subject(initName: "2", initTeacher: "2", initCl

我有一个名为Subject的自定义类,我试图初始化该类的版本并将其附加到数组中,但是当我将一个类附加到数组中时,它会覆盖其中所有准备就绪的主题。例如,此代码

var things:[Subject] = []
    things.append(Subject(initName: "1", initTeacher: "1", initClassroom: "1"))
    things.append(Subject(initName: "2", initTeacher: "2", initClassroom: "2"))
    print(things[0].name)
    print(things[1].name)
当它应该打印时,是否打印
可选(“2”)可选(“2”)
“可选(“1”)可选(“2”)”

这是我的自定义类的代码

class Subject: NSManagedObject{

var name: String?
var teacher: String?
var classroom: String?

init(initName: String, initTeacher: String, initClassroom: String){
    name = initName
    teacher = initTeacher
    classroom = initClassroom
}

func save() -> Bool{
    if(name == "" || teacher == "" || classroom == ""){
        return false
    }else{

        let appDelgate = UIApplication.sharedApplication().delegate as? AppDelegate
        let managedContext = appDelgate?.managedObjectContext

        let entity = NSEntityDescription.entityForName("Subject", inManagedObjectContext: managedContext!)
        let subject = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

        subject.setValue(name, forKey: "name")
        subject.setValue(teacher, forKey: "teacher")
        subject.setValue(classroom, forKey: "classroom")

        do{
            try managedContext?.save()
        }catch let error as NSError{
            print("Failed because of \(error)")
        }

        return true
    }
}

func edit(newName: String, newTeacher: String, newClassroom: String) -> Bool{
    let appDelgate = UIApplication.sharedApplication().delegate as? AppDelegate
    let managedContext = appDelgate?.managedObjectContext

    let fetchRequest = NSFetchRequest(entityName: "Subject")
    fetchRequest.predicate = NSPredicate(format: "name = %@", name!)
    do{
        let fetchResults = try managedContext?.executeFetchRequest(fetchRequest)
        let editingSubject = fetchResults![0] as! NSManagedObject

        editingSubject.setValue(newName, forKey: "name")
        editingSubject.setValue(newTeacher, forKey: "teacher")
        editingSubject.setValue(newClassroom, forKey: "classroom")

        do{
            try managedContext?.save()
            return true
        }catch{
            return false
        }
    }catch{
        return false
    }
}}

谢谢您的帮助

那么您显示的代码是否显示了问题?显示如何测试数组的内容。为什么要创建一个在显示的代码中没有使用的对象?@Wain问题是,当第二次附加到数组时,数组中的第一个值被第二个值覆盖。当我第一次运行“print(array[0].name]”时,它会打印“History”,而第二次则会打印西班牙语。你指的是哪个对象没有被使用