我需要深度复制Swift
通用数组。我可以在for循环中逐个完成,但可能会有一个更紧凑的解决方案。
答案 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
}
}