Usando String.CharacterView.Index.successor () en declaraciones

En el futuro, las declaraciones de estilo C se eliminarán de Swift . Si bien existen muchos methods alternativos para utilizar el estilo C para las instrucciones, como el uso de stride , o el operador ..< , estos solo funcionan en algunas condiciones

Por ejemplo, en las versiones anteriores de swift, fue posible recorrer todos los demás índices, String.CharacterView.Index , de una cadena usando C-style para sentencias

 for var index = string.startIndex; index < string.endIndex; index = string.successor().successor(){ //code } 

Sin embargo, esto ahora está en desuso. Hay una manera de hacer lo mismo, usando un ciclo de while

 var index = string.startIndex while index < string.endIndex{ //code index = index.successor().successor() } 

pero no es mucho más que una solución. Existe el operador ..< , que sería perfecto para recorrer cada índice de la cadena

 for index in string.startIndex..<string.endIndex 

Sin embargo, esto no ayuda con hacer un bucle en todos los demás índices de la cadena, o cada nésimo índice de la cadena

¿Hay alguna forma más "espontánea" de recorrer cada otro índice de una cadena que no sea un ciclo while? Esta pregunta no se refiere solo a los índices de cadena, sino a los objects que tienen funciones tales como .successor() en general, donde stride y ..< no funcionan.

puedes usar 'stepping'

 let str = "abcdefgh" for i in str.characters.indices where str.startIndex.distanceTo(i) % 2 == 0 { print(i,str.characters[i]) } 

huellas dactilares

 0 a 2 c 4 e 6 g 

ACTUALIZACIÓN, basada en las notas de Sulthan

 for (i,v) in str.characters.enumerate() where i % 2 == 0 { print(i, v) } 

Hagámoslo con functional programming:

 let text = "abcdefgh" text.characters .enumerate() // let's get integer index for every character .filter { (index, element) in index % 2 == 0 } // let's filter out every second character .forEach { print($0, $1) } // print 

Resultado:

 0 a 2 c 4 e 6 g