我有一個做以下的方法:的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