with while style statement removed loop index has for been array swift

style - swift 4 while loop



¿Cómo puedo hacer un Swift for-in loop con un paso? (1)

Esta pregunta ya tiene una respuesta aquí:

Con la eliminación del estilo tradicional de estilo C en Swift 3.0 , ¿cómo puedo hacer lo siguiente?

for (i = 1; i < max; i+=2) { // Do something }

En Python, la instrucción de flujo de control for-in tiene un valor de paso opcional:

for i in range(1, max, 2): # Do something

Pero el operador del rango Swift parece no tener equivalente:

for i in 1..<max { // Do something }


El sinónimo Swift para un "paso" es "zancada": el protocolo Strideable de hecho, implementado por muchos tipos numéricos comunes .

El equivalente de (i = 1; i < max; i+=2) es:

for i in stride(from: 1, to: max, by: 2) { // Do something }

Alternativamente, para obtener el equivalente de i<=max , use la variante de paso:

for i in stride(from: 1, through: max, by: 2) { // Do something }

Tenga en cuenta que stride devuelve un StrideTo / StrideThrough , que se ajusta a la Sequence , así que cualquier cosa que pueda hacer con una secuencia, puede hacerlo con el resultado de una llamada a stride (es decir, map , forEach , filter , etc.). Por ejemplo:

stride(from: 1, to: max, by: 2).forEach { i in // Do something }