我将自定义类的值分配给另一个变量。更新新变量的值会影响原始变量的值。但是,我需要停止引用变量来更新原始变量。
以下是正在发生的事情的基本表现:
var originalVariable = CustomClass()
originalVariable.myProperty = originalValue
var referenceVariable = originalVariable
referenceVariable.myProperty = updatedValue
print("\(originalVariable.myProperty)") //this prints the ->updatedValue<- and not the ->originalValue<-
我尝试在一个struct中包装referenceVariable,使其成为一个值类型,但它还没有解决问题。
我找到了有关价值和参考类型的信息,但我找不到解决方案。
我的问题简而言之:如何停止更新参考变量,以更新从其分配的值的原始变量?
提前致谢。
答案 0 :(得分:2)
整个引用语义(由类使用)是所有变量都指向内存中的相同(即,它们引用相同)对象。如果您不想要这种行为,则应使用值类型(Struct,Enum,Array ...)或创建对象的副本。
如果CustomClass
实施了NSCopying
协议,您可以这样做:
var referenceVariable = originalVariable.copy()
如果没有,你必须找到其他方法来复制或自己实施协议。
在结构中包装类只会创建两个不同的结构,每个结构包含对同一对象的不同引用。