web-dev-qa-db-fra.com

Correction de l'avertissement "Le style C pour la déclaration est obsolète" dans Swift 3

J'ai mis à jour Xcode vers 7.3 et maintenant j'ai un avertissement à la fonction que j'utilise pour créer des chaînes aléatoires.

J'ai essayé de changer l'instruction for avec for (i in 0 ..< len){...} cependant, l'avertissement est devenu une erreur.

Comment puis-je supprimer l'avertissement?

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
}
27
SNos

La boucle de style C for a été déconseillée dans Swift 3. Vous pouvez continuer à l'utiliser pendant un certain temps, mais elles disparaîtront certainement à l'avenir.

Vous pouvez réécrire votre boucle dans le style de Swift:

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

Puisque vous n'utilisez pas du tout i dans le corps de la boucle, vous pouvez le remplacer par:

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

Ce BLOG m'a sauvé la vie.

[~ # ~] incrémentation [~ # ~]

for i in 0 ..< len {

}

[~ # ~] décrémentation [~ # ~]

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

}

INDEXATION NON SÉQUENTIELLE

Utiliser où

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

}

Utilisation de la foulée vers ou à travers

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

}
22
Tom Calmon

dans Swift 3 ça fait une erreur

un remplacement général a été publié et il suffit d'ajouter

Pour Swift 3 et besoin de changer l '"index"

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

J'ai eu du succès avec ce qui suit. Vous pouvez utiliser la boucle for comme suit - notez que la boucle for est inclusive, vous devrez donc peut-être vérifier que len est réellement supérieur à 0:

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

Ou vous pouvez utiliser ceci:

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

BTW il semble que XCode 7.x ne vous aide à y arriver mais c'est un processus en deux étapes. Vous devez d'abord changer votre opérateur d'incrémentation (disons) i ++ en i + = 1, puis l'avertissement XCode vous aide à modifier la boucle.

5
Richard Bown