我有一个以这种方式声明的变量
var model: cellModelCollection<AnyObject, collectionViewCell>
我想使用与模型相同的值创建另一个变量 modelCopy ,但如果我从 modelCopy 中删除项目,我不希望从模型。
let modelCopy = model
不起作用。
我还试图创建一个struct s
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 :(得分:0)
您的cellModelCollection
应该是 struct 类型,而不是类。 结构在代码中传递时始终会被复制,并且不使用引用计数。
在故事板中查看下面的示例。您将看到打印将产生不同的结果。
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 Model
更改为class Model
,则打印结果将相同:
[0, 1]
[0, 1]