var empObj : EmployeeModel!
var tempObj : EmployeeModel!
tempObj = empObj.copy() as! EmployeeModel
当我复制empObj
到tempObj
它的内存地址时,它的内存地址发生了变化。我想防止这种情况发生吗?
如果您使用对象,则两个变量可以指向同一个对象,因此更改一个变量会同时更改它们,而如果您尝试使用结构体,您会发现 Swift 创建了一个完整副本,因此更改副本不会影响原始对象。如果你想修改一个类对象的副本以便修改一个对象不会影响其他任何东西,你可以使用 NSCopying。
NSCopying 的示例代码
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)")
当您想要不同值的相同地址时
使用 =
例如。
var ogArray : NSMutableArray() var tempArray = ogArray
当你复制它时,它实际上是在做一个新的参考。而不是复制只是分配值。那么两者将共享相同的参考
var empObj : EmployeeModel!
var tempObj = empObj