var empObj : EmployeeModel!
var tempObj : EmployeeModel!
tempObj = empObj.copy() as! EmployeeModel
当我将empObj
复制到tempObj
时,它的内存地址已更改。我想避免这个主意吗?
答案 0 :(得分:0)
当您复制它时实际上是一个新的参考。而不是复制只是分配值。那么两者将共享相同的参考
var empObj : EmployeeModel!
var tempObj = empObj
答案 1 :(得分:0)
当您希望相同的地址具有不同的值
USE =
例如。
var ogArray:NSMutableArray() var tempArray = ogArray
答案 2 :(得分:0)
如果您使用对象,则两个变量可以指向同一对象,因此更改一个变量会同时更改它们,而如果您尝试使用structs进行操作,则会发现Swift创建了完整副本,因此更改副本不会影响原版的。 如果要修改类对象的副本以使修改一个对象对其他对象没有影响,则可以使用NSCopying。
NSCopy的示例代码
class Person: NSObject, NSCopying {
var firstName: String
var lastName: String
var age: Int
init(firstName: String, lastName: String, age: Int) {
self.firstName = firstName
self.lastName = lastName
self.age = age
}
func copy(with zone: NSZone? = nil) -> Any {
let copy = Person(firstName: firstName, lastName: lastName, age: age)
return copy
}
}
在Playground中检查此代码的输出
let paul = Person(firstName: "Paul", lastName: "Hudson", age: 36)
let sophie = paul.copy() as! Person
sophie.firstName = "Sophie"
sophie.age = 6
print("\(paul.firstName) \(paul.lastName) is \(paul.age)")
print("\(sophie.firstName) \(sophie.lastName) is \(sophie.age)")