【问题标题】:mutating class property on swift struct在快速结构上改变类属性
【发布时间】:2019-11-26 22:08:03
【问题描述】:

我有一个 Swift 结构,它包含一个像这样的可变类:

struct Foo {
  var bar: BarClass?

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

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

初始化 X,初始化 Y,deinit X。

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

这是否仅仅意味着新分配的 BarClass() 的内容被复制到了原始文件中?那么,除了地址之外,结果是不是和新的bar替换了原来的一样,原来的被释放了?

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

【问题讨论】:

  • 请提供一个完整的工作可测试示例。
  • “或者,最好只调用一次 BarClass(),然后让 foobar() 显式重置其内容。”实际用例是什么?显示真实代码,而不是一些人工示意图。
  • 如果 X 和 Y 完全一样,也许会进行一些优化?
  • 我无法重现该问题。正如马特所说,请发布确切的代码,包括您的打印语句。

标签: swift class struct mutating-function


【解决方案1】:

将问题缩小到测试用例后,我发现了问题。我错误地创建了结构的副本,认为它是一个参考。所以,新的 BarClass 并没有破坏 previous,因为 previous 仍然被结构的原始副本引用。

该用例试图在现有代码库中添加一些功能,但改动很小。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 2017-07-29
    • 1970-01-01
    • 2019-01-14
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多