0
var empObj : EmployeeModel!
var tempObj : EmployeeModel!

tempObj = empObj.copy() as! EmployeeModel

当我复制empObjtempObj它的内存地址时,它的内存地址发生了变化。我想防止这种情况发生吗?

4

3 回答 3

0

如果您使用对象,则两个变量可以指向同一个对象,因此更改一个变量会同时更改它们,而如果您尝试使用结构体,您会发现 Swift 创建了一个完整副本,因此更改副本不会影响原始对象。如果你想修改一个类对象的副本以便修改一个对象不会影响其他任何东西,你可以使用 NSCopying。

  • 让你的类符合 NSCopying。这不是严格要求的
  • 实现方法 copy(with:),实际复制发生的地方。
  • 在您的对象上调用 copy()。

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)")

参考

于 2018-07-20T08:02:04.260 回答
0

当您想要不同值的相同地址时

使用 =

例如。

var ogArray : NSMutableArray() var tempArray = ogArray

于 2018-07-20T06:41:08.893 回答
0

当你复制它时,它实际上是在做一个新的参考。而不是复制只是分配值。那么两者将共享相同的参考

var empObj : EmployeeModel!
var tempObj = empObj
于 2018-07-20T06:08:01.443 回答