停止引用变量改变原始变量的值
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 包装在结构中只会产生两个不同的结构,每个结构包含对同一对象的不同引用。
我正在将自定义 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 包装在结构中只会产生两个不同的结构,每个结构包含对同一对象的不同引用。