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
}