一尘不染

Swift-在结构对象上进行迭代时如何使其变形

swift

我仍然不确定结构复制或引用的规则。

我想在从数组中迭代结构对象时对其进行突变:例如,在这种情况下,我想更改背景颜色,但是编译器对我大吼大叫

struct Options {
  var backgroundColor = UIColor.blackColor()
}

var arrayOfMyStruct = [MyStruct]

...

for obj in arrayOfMyStruct {
  obj.backgroundColor = UIColor.redColor() // ! get an error
}

阅读 230

收藏
2020-07-07

共1个答案

一尘不染

struct是值类型,因此在for循环中您正在处理副本。

就像测试一样,您可以尝试以下操作:

斯威夫特3:

struct Options {
   var backgroundColor = UIColor.black
}

var arrayOfMyStruct = [Options]()

for (index, _) in arrayOfMyStruct.enumerated() {
   arrayOfMyStruct[index].backgroundColor = UIColor.red
}

斯威夫特2:

struct Options {
    var backgroundColor = UIColor.blackColor()
}

var arrayOfMyStruct = [Options]()

for (index, _) in enumerate(arrayOfMyStruct) {
    arrayOfMyStruct[index].backgroundColor = UIColor.redColor() 
}

在这里,您只需枚举索引,然后直接访问存储在数组中的值。

希望这可以帮助。

2020-07-07