Swift-更新对象



如果我想更新现有的类对象,是否有比复制init更新方法更容易的方法了吗?(我的个人对象有大约十个属性,这些属性首先定义或可以在以后的应用程序中进行编辑(

下面列出的问题:

  1. person1重新引导不更新对父子阵列中的person1对象的引用 - 子女数组不包含更新的对象

  2. Person2对象的行为如通缉(Child Array包含更新的对象(,但在Update方法中使用重复的初始器代码将"编辑到位"中,从而在Dry中看起来真的很糟糕

有什么提示如何迅速做?

import UIKit
class Person {
    var name: String
    var surname: String
    var age: Int?
    init(name: String, surname: String, age: Int? = nil) {
        self.name = name
        self.surname = surname
        self.age = age
    }
    func update(name: String, surname: String, age: Int? = nil) {
        self.name = name
        self.surname = surname
        self.age = age
    }
}
class Parent {
    var child = [Person]()
}
var parent = Parent()
var person1 = Person(name: "John", surname: "Doe")
print(person1.name)
parent.child.append(person1)
person1 = Person(name: "Jack", surname: "Doe")
print(person1.name)
print(parent.child.first!.name)
var person2 = Person(name: "Tom", surname: "Cruise")
print(person2.name)
parent.child.append(person2)
person2.update(name: "Jim", surname: "Cruise")
print(person2.name)
print(parent.child.last!.name)

使它更清楚地考虑了一系列用户配置文件,您可以在其中添加新的配置文件或编辑现有配置文件。上述问题是关于编辑现有用户配置文件

这是您两个查询的解释,

1。 parent child arrayreference包含到person1对象,即person1 and parent child array存储对同一对象的引用。

var person1 = Person(name: "John", surname: "Doe")
parent.child.append(person1)

现在,您正在分配new object to person1,而不是对同一对象进行更改,即

person1 = Person(name: "Jack", surname: "Doe")

这不会在parent child array中反映。它仍将包含对先前Person对象的引用。

这就是您在Person1和parent child array

中获得不同名称值的原因
print(person1.name) //Jack
print(parent.child.first!.name) //John

2。,而不是添加一个用于更新对象的单独方法-update(name:surname:age:),您可以简单地使用对象属性上的. operator单独更新值,即

var person2 = Person(name: "Tom", surname: "Cruise")
parent.child.append(person2)
person2.name = "Jim"

由于在上述代码中,我们只是在更新其值,而不是将新的Person对象分配给person2

因此,person2parent child array's object仍将reference the same object,因此将打印相同的name值。

print(person2.name) //Tom
print(parent.child.last!.name) //Tom

最新更新