【发布时间】:2017-07-26 00:40:42
【问题描述】:
我有一个 init,它接收一个类的实例(我希望每个人都知道这意味着它是通过引用传递的)
我希望能够复制对象并存储在两个类实例变量中,这样,我就有一个函数可以充当“重置”,它将我所做的任何更改设置为某一点回到以前的状态。
类似:
convenience init(_ item:Item?){
self.init()
self.item = item
self.undoItem = item
}
func reset(){
self.item = self.undoItem
self.reloadInfo()
}
对于应该是相对简单的解决方案,我没有取得太大的成功。我对 Swift 和 iOS 开发太陌生了。
【问题讨论】:
-
这两个方法在什么类?使用使用这些方法演示问题的示例代码更新您的问题。阐明代码实际发生的情况以及您希望发生的情况。
-
我不明白为什么这很难理解。我想弄清楚如何制作传递给 init 的项目的副本,以便我可以将它存储到两个不同的地方,这样它们就不会共享相同的引用。这将让我对其中一个进行更改,如果用户决定撤消这些更改,我可以调用重置函数来执行此操作。
-
确保
Item有一个复制初始化器,并使用它。请注意,如果您不进行深拷贝,如果任何属性是引用类型,您可能仍然会遇到问题,因为如果您进行浅拷贝,您将拥有两个不同的Item对象,但它们都会引用到它们的引用类型成员变量的相同实例。
标签: swift swift3 pass-by-reference