在包含对象的数组中,更改一项的属性不会更改对象本身

时间:2019-03-20 16:14:25

标签: swift

如果我只是更改属性而不是替换对新对象的引用,则不会发生这种情况。

这是一个类 Person ,它是一种引用类型,

class Person {
    var firstName: String
    var lastName: String
    init(firstName: String, lastName: String) {
        self.firstName = firstName
        self.lastName = lastName
    }
}

这是的一个实例,

var someone = Person(firstName: "Johnny", lastName: "Appleseed")

然后我创建一个包含Person类型值的数组

var lotsOfPeople = [someone, someone, someone]

我想 lotsOfPeople 包含3个对某人的引用。 但是,如果我在lotsOfPeople中更改第三个值,

lotsOfPeople[2] = Person(firstName: "Lucy", lastName: "Swift")

某人本身不变。

print(someone.firstName) // Johnny

我认为这意味着 lotsOfPeople [2] 不是对某人的引用。 这怎么可能发生?

1 个答案:

答案 0 :(得分:4)

问题是您要替换../../build/mv/task/mvtask1d pic.json 上的引用以指向新对象。这就是为什么原始lotsOfPeople[2]不变的原因。

如果您使用了Person,它将改变。

或者这样做:

lotsOfPeople[2].firstName = "Lucy"

然后您还将看到原始更改。