迭代器元素在 For-In 循环中的可变性,在 Swift 中有一个数组



我在 Swift 3.0 中有一些这样的代码,用于尝试更新元素数组中的属性......

for point in listOfPoints {
    var pointInFrame : Float = Float(point.position.x * sensorIncomingViewPortSize.width) + Float(point.position.y)
    point.status = getUpdateStatus( pointInFrame )
}

但是我得到一个编译错误:"无法分配给属性:"点"是"let"常量"[对于第 3 行]

无论如何,是否有任何方法可以使迭代器(点(在 Swift 中可变,例如如何将"inout"用于函数参数?

还是您应该以另一种方式完成此任务?

提前谢谢。

斯坦

只需将其更改为var,而不是let声明point即可。 let是一个constant.

实现此目的的另一种方法:

for i in 0 ... myStructArray.count - 1 {
    var st = myStructArray[i]
    st.someStringVariable = "xxx"   // do whatever you need with the struct
    st.someIntVariable = 123        // do more stuff
    // last step (important!):
    myStructArray[i] = st           // necessary because structs are VALUE types, not reference types.
}

如果只需要进行一项更改,则可以省略将局部变量(示例中st(定义为数组元素的步骤,然后将数组元素设置为等于局部变量的步骤。 但是,如果您要对元素进行大量更改,如果可能更简洁地制作局部变量,请对其进行所有更改,然后将该变量分配回数组元素。

如果数组是类而不是结构,则不需要赋回的最后一步(引用类型 - 类,vs 值类型 - 结构(。

相关内容

最新更新