一尘不染

快速复制对象数组的深层副本

swift

我有一个叫Meal的课程

class Meal {
    var name : String = ""
    var cnt : Int = 0
    var price : String = ""
    var img : String = ""
    var id : String = ""

    init(name:String , cnt : Int, price : String, img : String, id : String) {
        self.name = name
        self.cnt = cnt
        self.price = price
        self.img = img
        self.id = id
    }
}

而且我有很多餐:

var ordered = [Meal]()

我想复制该数组,然后在其中一个实例中对Meal实例进行一些更改,而在第二个实例中不更改Meal实例,我将如何对其进行深拷贝?


阅读 196

收藏
2020-07-07

共1个答案

一尘不染

由于ordered是一个快速数组,所以该语句

 var orderedCopy = ordered

将有效地复制原始数组。

但是,由于Meal是一 ,因此新数组将包含对原始膳食中相同膳食的引用。

如果您也想复制进餐内容,那么在一个数组中更改进餐不会在另一个数组中更改进餐,那么您必须将Meal定义为 struct 而不是类:

struct Meal { 
  ...

苹果书中

使用struct创建结构。结构支持许多与类相同的行为,包括方法和初始化程序。结构和类之间最重要的区别之一是,结构在代码中传递时始终会被复制,而类是通过引用传递的。

2020-07-07