在Swift中复制带值的变量

时间:2016-09-13 15:10:03

标签: ios swift struct

我有一个以这种方式声明的变量

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

1 个答案:

答案 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]