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){}