2016-09-13 52 views
-1

与值的变量我以这种方式复制斯威夫特

var model: cellModelCollection<AnyObject, collectionViewCell> 

我想创建另一个变量modelCopy与作为模型相同的值声明的变量,但如果我从modelCopy删除项目我不希望它从型号中删除。

let modelCopy = model不起作用。

我还试图创建一个的struct

a.model = self.model 
b.model = self.model 
//delete an item from a.model 
print (a.model.count) // 32 
print (b.model.count) // 32 element also deleted from b 
+0

请'cellModelCollection'和'结构添加代码s的定义。 – mixel

回答

0

cellModelCollection应该是类型结构,不类的。 结构在代码中传递时总是被复制,并且不使用引用计数。 检查下面的故事板中的示例。您会看到该打印件会产生不同的结果。

struct Model { 
    var arg = [0, 1, 2] 
} 
struct Struct { 
    var model: Model? 
} 

var myStruct1 = Struct() 
var myStruct2 = Struct() 
var myModel = Model() 

myStruct1.model = myModel 
myModel.arg.removeLast() 
myStruct2.model = myModel 

print(myStruct1.model!.arg) 
print(myStruct2.model!.arg) 

这使结果:

[0, 1, 2] 
[0, 1] 

,但如果更改struct Modelclass Model然后导致印刷将是相同的:

[0, 1] 
[0, 1] 
+0

谢谢,但有没有其他解决方案?由于某些原因,我无法将其更改为Struct。 – user567

+0

好的,如果你可以改变模型,那么你可以写'init(model:Model)'或类似的东西,并且复制所有东西。 –