2

我将自定义类的值分配给另一个变量。更新新变量的值会影响原始变量的值。但是,我需要阻止引用变量更新原始变量。

这是正在发生的事情的基本表示:

var originalVariable = CustomClass()

originalVariable.myProperty = originalValue

var referenceVariable = originalVariable 

referenceVariable.myProperty = updatedValue

print("\(originalVariable.myProperty)") //this prints the ->updatedValue<- and not the ->originalValue<-

我尝试将 referenceVariable 包装在一个结构中以使其成为值类型,但它并没有解决问题。

我找到了有关值和引用类型的信息,但我无法找到解决方案。

简而言之,我的问题是:如何停止对引用变量的更新,使其不再更新为其分配值的原始变量?

提前致谢。

4

1 回答 1

2

整个引用语义点(如类所使用的)是所有变量都指向内存中的同一个(即它们引用同一个)对象。如果您不想要这种行为,您应该使用值类型(结构、枚举、数组...)或创建对象的副本。

如果CustomClass实现了NSCopying协议,您可以执行以下操作:

var referenceVariable = originalVariable.copy()

如果没有,您将不得不找到其他方法来复制它或自己实现协议。

将类包装在结构中只会生成两个不同的结构,每个结构都包含对同一对象的不同引用。

于 2017-06-08T09:19:28.537 回答