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

Swift 停止引用变量更改原始变量的值,swift,swift-structs,pass-by-reference-value,Swift,Swift Structs,Pass By Reference Value,我正在将自定义类的值赋给另一个变量。更新新变量的值会影响原始变量的值。但是,我需要阻止引用变量更新原始变量 下面是正在发生的事情的基本描述: var originalVariable = CustomClass() originalVariable.myProperty = originalValue var referenceVariable = originalVariable referenceVariable.myProperty = updatedValue print("\

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

下面是正在发生的事情的基本描述:

var originalVariable = CustomClass()

originalVariable.myProperty = originalValue

var referenceVariable = originalVariable 

referenceVariable.myProperty = updatedValue

print("\(originalVariable.myProperty)") //this prints the ->updatedValue<- and not the ->originalValue<-
var originalVariable=CustomClass()
originalVariable.myProperty=originalValue
var referenceVariable=原始变量
referenceVariable.myProperty=updatedValue

print(\(originalVariable.myProperty)//这将打印->updatedValueoriginalValue整个引用点语义(由类使用)是所有变量指向内存中相同的(即,它们引用相同的)对象。如果不希望出现这种行为,应该使用值类型(Struct、Enum、Array…)或创建对象的副本

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

var referenceVariable = originalVariable.copy()
如果没有,您必须找到其他方法来复制它或自己实现协议


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

可以将其改为结构,而不是将类用于CustomClass吗?问题是类是一个引用,当您执行var reference=originalVariable时,您只是创建了一个对originalVariable的引用,而不是副本。这就是类成为类的原因。如果您不希望使用此指针功能,请使用Struct代替感谢您的回答。我尝试将CustomClass更改为结构,这解决了问题。我曾尝试将引用变量放入一个结构中,但没有成功。我尝试使用NSObject方法,但copy方法似乎无法在CustomClass数组上调用,因此它对我正在处理的项目不起作用。但是,我认为还有其他方法可以复制阵列。干杯,谢谢你的回答。