为什么两个对象都自动更改?

时间:2016-03-28 18:10:29

标签: ios xcode swift swift-playground

以下是我定义的课程

     private Configuration config = Play.application().configuration();

     @Inject
      public DummyService() {
        this.dummy = new DummyModel(config.getString('some-value'));
      }

我改变了pe​​rson1地址的城市但是为什么person2城市改变了,我该如何克服这个问题呢?

3 个答案:

答案 0 :(得分:4)

您正在使用Class作为Address对象。所以,它通过引用传递。有关值和参考类型的更多详细信息,请查看此帖子,https://developer.apple.com/swift/blog/?id=10

在您的情况下,如果您将地址从类更改为结构,则一切都按预期工作,因为结构按值传递。

struct Address {
  let city: String
  let country: String
}

并且,请注意您不需要任何初始化程序。默认情况下,Struct会创建初始化程序,您可以像上面那样使用它。

答案 1 :(得分:3)

面向对象的编程101。

您将address的同一个实例传递给两个对象。从本质上讲,它意味着John和Adam具有相同的地址,当该地址发生变化时,它们的地址(只是一个对象)都会发生变化。

如果您想将Address用作value type而不是reference type,则可以将地址转换为struct,其他所有内容都可以正常运行:< / p>

struct Address {
  var city: String
  var country: String
  init(city: String, country: String){
    self.city = city
    self.country = country
  }
}

值类型,如IntDouble(以及结构,就像我们刚刚看到的那样)只能通过值来标识,而不能通过它们的底层内存地址来标识。

答案 2 :(得分:1)

您实际上是在向您的人员传递地址指针。

由于两个人都指向同一个地址,因此更改Person1的地址也会改变Person2的地址。