gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 06:11:38 25 4
gpt4 key购买 nike

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

这里有一个类Person,是一个引用类型,

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

这是Person的实例,

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

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

var lotsOfPeople = [someone, someone, someone]

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

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

某人本身没有改变。

print(someone.firstName) // Johnny

我认为这意味着lotsOfPeople[2] 不是对某人 的引用。怎么会这样?

最佳答案

问题是您要替换 lotsOfPeople[2] 中的引用以指向新对象。这就是原始 Person 未更改的原因。

如果你做了 lotsOfPeople[2].firstName = "Lucy" 那么它就会改变。

或者做:

let person = lotsOfPeople[2]
person.firstName = "Lucy"

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

关于swift - 在包含对象的数组中,更改一项的属性不会更改对象本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55265453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com