Вот объяснение обоих ваших запросов,
1. parent child array
содержит reference
для объекта 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
, мы просто обновляем его значения.
Итак, person2
и parent child array's object
будут по-прежнему reference the same object
и, следовательно, будут печатать те же значения name
.
print(person2.name) //Tom
print(parent.child.last!.name) //Tom