这只是实际发生的事情的视觉情景。
我的View Controller1中有一个对象A.类似地,我在View Controller2中有一个类似于ObjectA类型的ObjectB。
现在,点击一个按钮,我从第一个视图控制器分配ViewController2.ObjectB = ViewController1.ObjectA
(或self.ObjectA)。
现在,数据成功传递到ViewController2。但是,当我在ViewController2中对ObjectB执行一些更改时,更改也会反映在ViewController1的ObjectA中。
这不应该发生,因为ObjectA的原始数据随后丢失,如果用户来自ViewController1到ViewController2,我需要这样做,反之亦然,因为我总是在点击我的按钮时执行此ViewController2.ObjectB = ViewController1.ObjectA
ViewController1。
任何人都知道该怎么做?请帮帮我。这让我疯狂: - (
答案 0 :(得分:2)
这种情况正在发生,因为您的对象是通过引用传递的,而不是通过值传递的。 你可以做的是复制你的对象,而不是传递对象本身。
ViewController2.ObjectB = ViewController1.ObjectA.clone()
你必须在ObjectA类中实现克隆函数,它将从当前的对象创建一个新对象,如下所示
class MyClass {
let number: Int
init(number: Int) {
self.number = number
}
func clone() -> MyClass {
return MyClass(number: self.number)
}
}
如果你想了解更多信息 https://developer.apple.com/swift/blog/?id=10和 https://www.raywenderlich.com/112027/reference-value-types-in-swift-part-1