swift for-loop swift2 compiler-warnings

Se corrigió la advertencia “El estilo C para la declaración está en desuso” en Swift 3



for-loop swift2 (4)

He actualizado Xcode a 7.3 y ahora tengo una advertencia sobre la función que uso para crear cadenas aleatorias.

Intenté cambiar la declaración for con for (i in 0 ..< len){...} sin embargo, la advertencia se convirtió en un error.

¿Cómo puedo eliminar la advertencia?

static func randomStringWithLength (len : Int) -> NSString { let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" let randomString : NSMutableString = NSMutableString(capacity: len) for (var i=0; i < len; i += 1){ // warning let length = UInt32 (letters.length) let rand = arc4random_uniform(length) randomString.appendFormat("%C", letters.characterAtIndex(Int(rand))) } return randomString }


C-style for loop ha quedado en desuso en Swift 3. Puede seguir usándolo por un tiempo, pero ciertamente desaparecerá en el futuro.

Puede reescribir su bucle al estilo de Swift:

for i in 0..<len { let length = UInt32 (letters.length) let rand = arc4random_uniform(length) randomString.appendFormat("%C", letters.characterAtIndex(Int(rand))) }

Como no usa i en absoluto en el cuerpo del bucle, puede reemplazarlo con:

for _ in 0..<len { // do stuffs }


Este BLOG me salvó la vida.

INCREMENTANDO

for i in 0 ..< len { }

DISMINUCION

for i in (0 ..< len).reverse() { }

ÍNDICE NO SECUENCIAL

Usando donde

for i in (0 ..< len) where i % 2 == 0 { }

Usando zancadas hacia o por

for i in 0.stride(to: len, by: 2) { }


He tenido éxito con lo siguiente. Puede usar el bucle for de la siguiente manera: tenga en cuenta que el bucle for es inclusivo, por lo que es posible que deba verificar que len sea realmente mayor que 0:

for i in 0...len - 1 { let length = UInt32 (letters.length) let rand = arc4random_uniform(length) randomString.appendFormat("%C", letters.characterAtIndex(Int(rand))) }

O puedes usar esto:

for i in 0 ..< len { let length = UInt32 (letters.length) let rand = arc4random_uniform(length) randomString.appendFormat("%C", letters.characterAtIndex(Int(rand))) }

Por cierto, parece que XCode 7.x te ayuda a llegar allí, pero es un proceso de dos pasos. Primero debe cambiar su operador de incremento de (digamos) i ++ a i + = 1 y luego la advertencia XCode lo ayuda a modificar el ciclo.


en Swift 3 ha sido un error

se publicó un reemplazo general y simplemente agregue

Para Swift 3 y necesita cambiar el "índice"

for var index in stride(from: 0, to: 10, by: 1){}