swift - 在 swift 结构上改变类属性

标签 swift class struct mutating-function

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

struct Foo {
  var bar: BarClass?

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

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

初始化 X,初始化 Y,取消初始化 X。

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

这是否仅仅意味着新分配的 BarClass() 的内容被复制到原来的?那么,除了地址之外,结果是否与新柱替换原来的柱一样,并且原来的柱被解除分配?

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

最佳答案

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

用例试图以最少的更改向现有代码库添加一些功能。

感谢您的反馈/确认我需要对此进行更多研究。

关于swift - 在 swift 结构上改变类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57086603/

相关文章:

c - 排序列表,错误 "not respond"

ios - XCUITest 中的 Force Touch/3D Touch

ios - 尝试从未被点击的 UIImageView 中检测 "touch up"

swift - Parse.com,根据对象值禁用 UIButton

python - 如何将内部类的代码移动到不同的文件(Python)?

c - SDL 在结构中加载图像

swift - 在 Swift 2.0 中进行 API 调用

c++ - 友元和运算符重载帮助

java - 你能从类文件创建java文件吗?反编译

json - 将不断变化的类型流解码为结构