tutorial objetos inicializadores español clases swift struct copy mutable

objetos - Swift-Cómo mutar un objeto struct al iterar sobre él



objetos en swift (4)

Puede utilizar use Array.indices para evitar ignorar el segundo valor con enumerated() :

for index in arrayOfMyStruct.indices { arrayOfMyStruct[index].backgroundColor = UIColor.red }

Todavía no estoy seguro sobre las reglas de struct copy o reference.

Quiero mutar un objeto struct al iterar sobre él desde una matriz: por ejemplo, en este caso me gustaría cambiar el color de fondo pero el compilador me está gritando

struct Options { var backgroundColor = UIColor.blackColor() } var arrayOfMyStruct = [MyStruct] ... for obj in arrayOfMyStruct { obj.backgroundColor = UIColor.redColor() // ! get an error }


Vi este método en algún código y parece estar funcionando

for (var mutableStruct) in arrayOfMyStruct { mutableStruct.backgroundColor = UIColor.redColor() }


struct son tipos de valores, por lo tanto, en el ciclo for se trata de una copia.

Solo como prueba, puede intentar esto:

Swift 3:

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

Swift 2:

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

Aquí solo enumera el índice y accede directamente al valor almacenado en la matriz.

Espero que esto ayude.


Para Swift 3, use el método enumrated() .

Por ejemplo:

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

La tupla también incluye una copia del objeto, por lo que podría usar for (index, object) lugar para llegar al objeto directamente, pero dado que es una copia, no podría mutar la matriz de esta manera, y debería usar el index para hacerlo. Para citar directamente la documentación :

Si necesita el índice entero de cada elemento, así como su valor, use el método enumerado () para iterar sobre la matriz en su lugar. Para cada elemento en la matriz, el método enumerated () devuelve una tupla compuesta por un entero y el elemento.