复制自定义对象按值而不是按引用复制它

时间:2017-03-22 13:51:54

标签: swift

在swift 3中复制对象的正确方法是什么?

我有一个对象

var element: Element!

Element是一个ObjectMapper类

class Element: Mappable {

    var name = String()
    var description = String()
    var price = Float()
    var optionals = [Optional]()

    required init?(map: Map){
    }

    func mapping(map: Map) {

        name            <- map["n"]
        description     <- map["d"]
        price           <- map["p"]
        optionals       <- map["o"]
    }

}

我想使用元素类型的某个对象初始化元素,然后创建从元素复制的 tmpElement 修改 tmpElement 并保留元素“未触动”。

如果我这样做

tmpElement = element

我想我正在传递引用,所以我在tmpElement中修改它也将在元素中修改。

那么哪种方式正确?我希望自己解释一下......

1 个答案:

答案 0 :(得分:1)

您可以编写一个init ializer,将Element复制为参数:

...
init(element:Element) {
     name = element.name
     description = element.description
     price = element.price
     optionals = element.optionals
}
...

并像这样使用它:

let element = Element(map)
let copy = Element(element)

或者,您可以将Element设为struct而不是class