Ale*_*exP 4 arrays swift swift4
我有一个数组,var arr = [myObject]
我想复制它,arr2以便第二个修改对象保持原样(按值复制).怎么做?
如果数组中的类型是枚举或结构,则没问题.你不需要考虑它:
var a = [1,2,3]
var b = a
b[1] = 3
b // [1, 3, 3]
a // [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
如果您的数组包含一个类,那么您需要考虑如何复制对象,因为默认情况下您将使用指向相同实例的指针:
let ns = NSMutableArray()
var arr = [ns]
var arr2 = arr
arr2[0].add(2)
arr[0] // [2]
Run Code Online (Sandbox Code Playgroud)
但是在类采用NSCopying协议的情况下,您可以使用copy()和mutableCopy()来制作必要的副本来解决此问题:
var arr3 = arr.map(){$0.mutableCopy() as! NSMutableArray}
arr3[0].add(1)
arr3[0] // [2, 1]
arr[0] // [2]
arr2[0] // [2]
Run Code Online (Sandbox Code Playgroud)
如果类不采用NSCopying协议,则需要扩展或子类,添加copy(with:)方法:
extension UIView: NSCopying {
public func copy(with zone: NSZone? = nil) -> Any {
return UIView(frame: self.frame)
}
}
var aView = UIView(frame:CGRect(x: 0, y: 0, width: 100, height: 100))
var bView = aView.copy() as! UIView
aView.tag = 5
bView.tag // 0
aView.tag // 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3819 次 |
| 最近记录: |