2017-03-22 51 views
0

哪种方法可以在swift 3中复制对象?复制自定义对象按值复制它不是通过引用

我有一个对象

var 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"] 
    } 

} 

我想初始化元件Element类型的一些对象,然后创建一个tmpElement复制来自元素修改tmpElemen t并且离开元件“未触及”。

如果我做

tmpElement = element 

我想我路过所以我在tmpElement修改将在元素被修改过的参考。

那么哪条路是正确的?我希望我解释自己...

回答

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 a struct而不是class

+0

好吧,我将所有的可打印的类作为结构体......现在会对memoy的用法产生影响吗? – Quetool

+0

您可以在[语言指南](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html)中找到有关类和结构的详细信息。或谷歌的“复制写”和“价值和参考类型”的Swift获得更好的理解 – shallowThought

+0

非常感谢你! – Quetool