我有一个做以下的方法:的iOS斯威夫特 - 修改一个数组修改另一个
let object = sportsArray[0]
let newObject = object
newObject.items?.removeAll()
当我做到这一点,“NEWOBJECT“项目”阵列现在是空的这是我想要的,但它也是清空“对象”中的'项目'数组..我在这里做错了什么?我如何防止这种情况发生。我想在不影响原始对象的情况下对newObject进行更改。任何帮助将不胜感激。提前致谢!
我有一个做以下的方法:的iOS斯威夫特 - 修改一个数组修改另一个
let object = sportsArray[0]
let newObject = object
newObject.items?.removeAll()
当我做到这一点,“NEWOBJECT“项目”阵列现在是空的这是我想要的,但它也是清空“对象”中的'项目'数组..我在这里做错了什么?我如何防止这种情况发生。我想在不影响原始对象的情况下对newObject进行更改。任何帮助将不胜感激。提前致谢!
你可以试试这个,你显然如果你的类实现NSCopy
可以使用object.copy()
也与真正的类名
let newObject = ClassName(object)
更换ClassName
。
就以如何定义新的初始化这里有一个参数一看: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html
这个似乎并不奏效。 “传递给调用的参数不带参数” –
您必须创建一个新的初始化函数,该函数使用相同的参数来解决编译错误或实现NSCopy –
sportsArray[0]
,object
和newObject
都引用到相同类实例。当您使用任何引用更改该实例时,其他引用将反映该更改,因为它们引用的是相同的内容。
您需要使用初始化程序或.copy
明确创建对象的新实例。
什么是对象的类型?它是一个类还是一个结构?当类需要'.copy()'被明确复制时(如果它符合'NSCopying' ofc),Struct可以被隐式复制。 –
Checkout http://stackoverflow.com/questions/27812433/how-do-i-make-a-exact-duplicate-copy-of-an-array对数组进行扩展,该数组完成从复制继承的对象的深层副本协议。 – Spads