我如何制作一个精确的数组副本?
我很难找到有关在Swift中复制数组的信息。
我试着使用.copy()
var originalArray = [1, 2, 3, 4]
var duplicateArray = originalArray.copy()
发布于 2015-01-07 13:00:58
内特是对的。如果您正在使用原始数组,那么您所需要做的就是将duplicateArray赋值给originalArray。
为了完整起见,如果您使用的是NSArray对象,则需要执行以下操作来完成NSArray的完整副本:
var originalArray = [1, 2, 3, 4] as NSArray
var duplicateArray = NSArray(array:originalArray, copyItems: true)
发布于 2016-01-09 04:09:42
对于普通的对象,可以做的是实现一个支持复制的协议,并使对象类实现该协议,如下所示:
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
发布于 2020-07-14 21:49:33
如果要复制某个类对象的数组中的项。然后,你可以在不使用NSCopying协议的情况下遵循下面的代码,但是你需要有一个初始化方法,它应该接受你的对象所需的所有参数。以下是在操场上测试的示例的代码。
class ABC {
var a = 0
func myCopy() -> ABC {
return ABC(value: self.a)
}
init(value: Int) {
self.a = value
}
}
var arrayA: [ABC] = [ABC(value: 1)]
var arrayB: [ABC] = arrayA.map { $0.myCopy() }
arrayB.first?.a = 2
print(arrayA.first?.a)//Prints 1
print(arrayB.first?.a)//Prints 2
https://stackoverflow.com/questions/27812433
复制相似问题