如何克隆 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
}
}
我需要深度复制一个 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
}
}