2017-08-28 68 views
-1

我需要複製一個自定義對象。是否有可能不手動複製每個領域?如何複製自定義對象?

var test1 = CustomerInfo() 
var test2 = CustomerInfo() 
test1 = test2 
test1.customername = "First" 
test2.customername = "Second" 

print(test1.customername) /* Getting "Second" , actually i want to get "First" */ 

請給我建議任何可能的解決方案?

+0

是的,你可以這樣做,就像test2 = test1.mutableCopy() –

+0

在嘗試mutablecopy時在該行上崩潰 – Jan

+2

只有當'CustomerInfo'是一個單例時纔會發生這種情況。用一個普通的結構或類,你會得到兩個不同的對象。 – vadian

回答

0

因爲類是引用類型,你可以使用struct(價值型)做

This answer確實是一個很好的例子

2
func copy(with zone: NSZone? = nil) -> Any { 
     let copy = CustomerInfo(myIvar1: Type, myIvar2: type)//constructor or your class 
     return copy 
    } 
var test1 = CustomerInfo() 
var test2 = test1.copy as! CustomerInfo 

你好月,

  1. 您需要確認協議NSCopying並實現上面的copyWithZone:方法。

  2. 在copyWithZone方法中,只需使用構造方法創建對象並返回該對象。

  3. 每當你想複製只需複製你的激動人心的對象。 爲完整的參考追蹤這個蘋果官方https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/ObjectCopying.html

而且如果只是複製是你的對象主要關注的只是使用結構,而不是類,因爲它們是值類型不引用類型。將類更改爲結構將使您的類型成爲值類型,但會面臨很多面向對象的限制。 謝謝

相關問題