Arrays have full value semantics in Swift, so there's no need for anything fancy.
var duplicateArray = originalArray
is all you need.
If the contents of your array are a reference type, then yes, this will only copy the pointers to your objects. To perform a deep copy of the contents, you would instead use map
and perform a copy of each instance. For Foundation classes that conform to the NSCopying
protocol, you can use the copy()
method:
let x = [NSMutableArray(), NSMutableArray(), NSMutableArray()]
let y = x
let z = x.map { $0.copy() }
x[0] === y[0] // true
x[0] === z[0] // false
Note that there are pitfalls here that Swift's value semantics are working to protect you from—for example, since NSArray
represents an immutable array, its copy
method just returns a reference to itself, so the test above would yield unexpected results.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…