我仍然不确定结构体复制或引用的规则。
我想在从数组中迭代的时候改变一个struct对象:例如,在这个例子中,我想改变背景颜色,但编译器在对我大喊大叫
struct Options {
var backgroundColor = UIColor.blackColor()
}
var arrayOfMyStruct = [MyStruct]
...
for obj in arrayOfMyStruct {
obj.backgroundColor = UIColor.redColor() // ! get an error
}
6条答案
按热度按时间gv8xihay1#
struct
是值类型,因此在for
循环中处理的是副本。作为一个测试,您可以尝试以下操作:
斯威夫特3:
斯威夫特2:
在这里,您只需枚举索引,并直接访问存储在数组中的值。
希望这个有用。
guicsvcw2#
您可以使用
Array.indices
:fafcakar3#
您正在使用
for in
对象,这些对象在使用for in
循环时被复制到局部变量。此外,数组是struct
对象,因此,如果您想改变数组的所有成员,则必须创建原始数组的修改副本,并由原始对象的修改副本填充。可以通过添加此阵列扩展来简化它。
斯威夫特4月5日
用法
qcuzuvrc4#
对于Swift 3,请使用
enumerated()
方法。例如:
元组还包括对象的副本,因此可以使用
for (index, object)
直接访问对象,但由于它是副本,因此不能以这种方式改变数组,而应该使用index
来完成。直接引用文档:如果需要每个项的整数索引及其值,请改用enumerated()方法迭代数组。对于数组中的每个项,enumerated()方法返回一个由整数和该项组成的元组。
r1zk6ea15#
另一种不用每次都写下标表达式的方法。
z0qdvdin6#
我在一些代码中看到过这个方法,它似乎正在工作