使用Swift复制静态变量

时间:2016-09-13 11:33:41

标签: ios swift static uicollectionview

我使用此代码来调整集合视图的模型。问题是,当我修改模型变量时,它还会修改 originalModel 变量,因为它是静态的,这不是我的意图。我想保持originalModel变量是静态的,只是将它的内容复制到模型变量中

class Helper{
  static var originalModel: [MyModel]? =  nil 

  static func modifyDataSourceBigView () -> [MyModel]? {
    if let model = originalModel {
      //model.removeAtIndexPath
      // Some other staff to adapt the model
      return model
    }
  }

  static func modifyDataSourceSmallView () -> [MyModel]? {
    if let model = originalModel {
      //model.removeAtIndexPath
      // Some other staff to adapt the model
      return model
    }
  }
}

2 个答案:

答案 0 :(得分:1)

问题出现是因为数组[MyModel]包含对MyModel个对象的引用。您的函数会返回originalModel副本,其中包含对原始 MyModel个对象的引用。您有两种方法可以解决您的问题:

  1. MyModel声明为struct,而不是class,并且实例将按值传递,而不是通过引用传递;
  2. 执行复制对象方法,例如,使MyModel符合NSCopying并实施copyWithZone()方法。

答案 1 :(得分:0)

您可以像下面那样复制静态数组。但它不会是深层复制,如果你想深度复制你的对象数组,请参考link

You have 14 unapplied migration(s)...