Swift 4按值复制数组
发布时间:2020-12-14 04:47:07 所属栏目:百科 来源:网络整理
导读:我有一个数组var arr = [myObject] 我想将它复制到arr2,以便在第二个中修改对象保持原样(按值复制).怎么做? 解决方法 如果数组中的类型是枚举或结构,则没问题.你不需要考虑它: var a = [1,2,3]var b = ab[1] = 3b // [1,3,3]a // [1,3] 如果您的数组包含一
我有一个数组var arr = [myObject]
我想将它复制到arr2,以便在第二个中修改对象保持原样(按值复制).怎么做? 解决方法
如果数组中的类型是枚举或结构,则没问题.你不需要考虑它:
var a = [1,2,3] var b = a b[1] = 3 b // [1,3,3] a // [1,3] 如果您的数组包含一个类,那么您需要考虑如何复制对象,因为默认情况下您将使用指向相同实例的指针: let ns = NSMutableArray() var arr = [ns] var arr2 = arr arr2[0].add(2) arr[0] // [2] 但是在类采用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] 如果类不采用NSCopying协议,则需要扩展或子类,添加副本(使用:)方法: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |