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

时间:2017-06-08 08:42:23

标签: swift swift-structs pass-by-reference-value

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

以下是正在发生的事情的基本表现:

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,使其成为一个值类型,但它还没有解决问题。

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

我的问题简而言之:如何停止更新参考变量,以更新从其分配的值的原始变量?

提前致谢。

1 个答案:

答案 0 :(得分:2)

整个引用语义(由类使用)是所有变量都指向内存中的相同(即,它们引用相同)对象。如果您不想要这种行为,则应使用值类型(Struct,Enum,Array ...)或创建对象的副本。

如果CustomClass实施了NSCopying协议,您可以这样做:

var referenceVariable = originalVariable.copy()

如果没有,你必须找到其他方法来复制或自己实施协议。

在结构中包装类只会创建两个不同的结构,每个结构包含对同一对象的不同引用。