gpt4 book ai didi

ios - 如何快速重新使用变量构建数组

转载 作者:搜寻专家 更新时间:2023-11-01 06:24:22 26 4
gpt4 key购买 nike

我计划使用一个类对象变量来捕获用户在重复周期中输入的数据集,并在数据集完成后将其添加到包含所有这些类变量的数组中。playground 中的简单示例代码:

class Example {
var a = 1
var b = 5
}

var exArray = [Example] () // this is the array holding the class variables
var anExample = Example () // default-init the "re-usable" variable

exArray.append(anExample)

exArray[0].a // results in 1 as expected
exArray[0].b // results in 5 as expected
exArray.count // 1 as expected

// now changing the re-usable variable properties with new user entered data

anExample.a = 3
anExample.b = 7

// appending the altered variable

exArray.append(anExample)

exArray[0].a // shows 3 where I still expect 1
exArray[0].b // shows 7 where I expect 7
exArray.count // shows 2 as expected

似乎数组包含变量本身(指针?)而不是变量的副本,所以它在数组中不断变化。有什么想法可以在不更改数组成员的情况下“重置”类变量吗?

最佳答案

如果您创建一个类的实例并分配给一个变量,则该变量包含对实例的引用而不是实例本身。

当您将变量添加到数组时,您添加了对类实例的引用。如果您稍后更改实例属性并添加到数组中,您将添加与之前添加的相同的引用。结果:您插入到数组中的所有内容都是一个包含对同一类实例的引用的变量。

根据您的应用程序架构和逻辑,您可能希望将类转换为结构 - 与类不同,类是引用类型,结构是值类型,因此在四处移动时,它的副本是创建。这种情况发生在:

  • 您将变量分配给另一个变量
  • 将它传递给函数或方法(除非使用了 inout 修饰符)

作为一个直接结果,如果你将一个结构实例插入到一个数组中,你调用了一个方法,因此创建了一个结构的副本并将其插入到数组中——该副本与原始结构没有任何关系,除了具有复制时的值相同。因此,您对其中任何一个所做的任何更改都不会反射(reflect)到另一个。

关于ios - 如何快速重新使用变量构建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com