【发布时间】:2014-09-29 20:19:29
【问题描述】:
我计划使用类对象变量来捕获用户在循环周期中输入的数据集,并在数据集完成后将其添加到包含所有这些类变量的数组中。 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
似乎数组包含变量本身(指针?)而不是变量的副本,所以这在数组中不断变化。有什么想法可以在不更改数组成员的情况下“重置”类变量吗?
【问题讨论】:
-
在设置新属性值之前创建一个新的 Example 实例。
anExample = Example() anExample.a = 3 anExample.b = 7 -
谢谢,弗朗西斯库。要创建一个新实例,我必须给变量另一个名称,因此无法访问同名变量。如果我使用相同的名称,我无法“重新实例化”它,因此更改 a 或 b 等属性仍会更改原始类对象 anExample 即使作为数组的成员 - 这是我不想要的跨度>
-
你可以按照我说的去做。但是如果你不想像我建议的那样在同一个变量名中创建另一个实例,你应该考虑使用 Struct 而不是 Class。正如 Swift 语言参考中所述,Struct 是通过它们的值传递的,而 Classes 是通过它们的引用传递的。
-
最终做到了,效果很好,谢谢