快速结构上的变异类属性

时间:2019-07-18 03:12:51

标签: swift class struct mutating-function

我有一个包含如下可变类的Swift结构:

struct Foo {
  var bar: BarClass?

  mutating func foobar() {
     let bar = BarClass()
     self.bar = bar
  }
}

看到一些奇怪的行为后,我放入一条语句以在init和deinit上打印BarClass()的地址。在第二次调用foobar时,我希望在第一个init的地址上看到deinit,例如:

init X,init Y,deinit X。

相反,我看到了init X,init Y,deinit Y。

这是否意味着新分配的BarClass()的内容已复制到原始文件中?那么,除了地址以外,结果是否与新的条形替换了原来的条形,并且原来的条形被释放了一样?

或者,最好只调用一次BarClass()并让foobar()显式重置其内容。

1 个答案:

答案 0 :(得分:1)

将问题缩小到一个测试用例后,我发现了问题。我错误地创建了该结构的副本,以为它是参考。因此,新的BarClass不会破坏先前的版本,因为先前的版本仍被该结构的原始副本引用。

该用例试图以最小的更改将一些功能添加到现有代码库中。

感谢反馈/确认,我需要进一步研究。