2017-04-26 33 views
0

我有一个做以下的方法:的iOS斯威夫特 - 修改一个数组修改另一个

let object = sportsArray[0] 
let newObject = object 
newObject.items?.removeAll() 

当我做到这一点,“NEWOBJECT“项目”阵列现在是空的这是我想要的,但它也是清空“对象”中的'项目'数组..我在这里做错了什么?我如何防止这种情况发生。我想在不影响原始对象的情况下对newObject进行更改。任何帮助将不胜感激。提前致谢!

+0

什么是对象的类型?它是一个类还是一个结构?当类需要'.copy()'被明确复制时(如果它符合'NSCopying' ofc),Struct可以被隐式复制。 –

+0

Checkout http://stackoverflow.com/questions/27812433/how-do-i-make-a-exact-duplicate-copy-of-an-array对数组进行扩展,该数组完成从复制继承的对象的深层副本协议。 – Spads

回答

1

你可以试试这个,你显然如果你的类实现NSCopy可以使用object.copy()也与真正的类名

let newObject = ClassName(object) 

更换ClassName

就以如何定义新的初始化这里有一个参数一看: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html

+0

这个似乎并不奏效。 “传递给调用的参数不带参数” –

+1

您必须创建一个新的初始化函数,该函数使用相同的参数来解决编译错误或实现NSCopy –

2

sportsArray[0]objectnewObject引用相同类实例。当您使用任何引用更改该实例时,其他引用将反映该更改,因为它们引用的是相同的内容。

您需要使用初始化程序或.copy明确创建对象的新实例。