微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift 4按值复制数组

我有一个数组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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐