我被这个问题难住了:我有一个名为CClass的定制类。在这个类中有一个名为counter的计数器。我按如下方式初始化我的实例。
var ArrayEntity = [CClass]()
var ParentOne = CClass()
var ParentTwo = CClass()
稍后,我将每个父元素分配给一个数组实体,如下所示:
ParentOne = ArrayEntity[i]
ParentTwo = ArrayEntity[i]
有时,两者的i值是相同的,因此两者将引用相同的Array实例。问题是,如果我这样做:
ParentOne.counter = 1
//value of ParentTwo.counter also becomes 1
//ArrayEntity[i].counter also becomes 1
我希望这些家长能够独立于克隆他们的ArrayEntity条目,但是我该怎么做呢?
非常感谢你的见解。希望这只是一个愚蠢的疏忽!
发布于 2018-05-31 06:41:33
这就是类的工作方式。赋值不复制对象;它只是创建对同一对象的多个引用。考虑一下:
class Dog {
var name : String = "Fido"
}
var fido = Dog()
print(fido.name) // Fido
var rover = fido
rover.name = "Rover"
print(fido.name) // Rover
在该代码中,我们更改了类实例rover
的name
属性- fido
的name
属性也被更改了!这是因为,在第三行中的赋值之后,fido
和rover
引用了同一个实例。
如果您不希望发生这种事情,那么不要维护对一个实例和同一个实例的两个引用。这里的一种可能的策略是给狗一个init(dog:)
方法,使一个新的狗以与原始狗相同的属性值开始生活-可以说是一个克隆。现在你已经有了两个独立的对象,它们可以继续独立生活。
https://stackoverflow.com/questions/50614149
复制相似问题