如何克隆Swift通用数组?

时间:2015-01-22 13:49:42

标签: ios arrays swift

我需要深度复制Swift通用数组。我可以在for循环中逐个完成,但可能会有一个更紧凑的解决方案。

3 个答案:

答案 0 :(得分:1)

试试这个:

var myArray = [Double](count: 5, repeatedValue: 1.0)
NSLog("%@", myArray)
var copiedArray = myArray
NSLog("%@", copiedArray)

答案 1 :(得分:1)

对于深度复制,对于普通对象,可以做的是实现支持复制的协议,并使对象类实现此协议,如下所示:

protocol Copying {
    init(original: Self)
}

extension Copying {
    func copy() -> Self {
        return Self.init(original: self)
    }
}

然后是用于克隆的Array扩展:

extension Array where Element: Copying {
    func clone() -> Array {
        var copiedArray = Array<Element>()
        for element in self {
            copiedArray.append(element.copy())
        }
        return copiedArray
    }
}

就是这样,查看代码和示例检查这个gist

答案 2 :(得分:0)

@Sohayb Hassoun批准的用于克隆数组的功能:

extension Array where Element: Cloneable {

    func clone() -> Array {
        let copiedArray: Array<Element> = self.compactMap { $0.cloned() }
        return copiedArray
    }

}