停止引用变量改变原始变量的值

Stopping reference variables changing the value of the original variable

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

这是对正在发生的事情的基本描述:

var originalVariable = CustomClass()

originalVariable.myProperty = originalValue

var referenceVariable = originalVariable 

referenceVariable.myProperty = updatedValue

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

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

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

我的问题简而言之: 如何阻止对引用变量的更新更新从中获取其值的原始变量?

提前致谢。

引用语义的全部要点(如 classes 使用的那样)是所有变量都指向相同的(即,它们 引用 相同的)对象记忆。如果您不想要这种行为,您应该使用值类型(Struct、Enum、Array...)或创建对象的副本。

如果 CustomClass 实现了 NSCopying 协议,您可以:

var referenceVariable = originalVariable.copy()

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

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