如何克隆 Swift 泛型数组?

How to clone Swift generic array?

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

试试这个:

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

对于深度复制,对于普通对象,可以做的是实现一个支持复制的协议,并使对象class像这样实现这个协议:

protocol Copying {
    init(original: Self)
}

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

然后是用于克隆的数组扩展:

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

差不多就这些了,要查看代码和示例请检查此 gist

@Sohayb Hassoun 批准了克隆阵列的功能:

extension Array where Element: Cloneable {

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

}