Подтвердить что ты не робот

Предупреждение об ошибке "C-style for Statement устарел" в Swift 3

У меня есть обновление Xcode до 7.3, и теперь у меня есть предупреждение для функции, которую я использую для создания случайных строк.

Я попытался изменить оператор for с помощью for (i in 0 ..< len){...}, однако предупреждение стало ошибкой.

Как удалить предупреждение?

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
}
4b9b3361

Ответ 1

Я не нашел способ подавить одно предупреждение в Swift. Вы можете подавлять все, что плохое.

Вы можете переписать свой цикл в стиль Swift:

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

Так как вы вообще не используете i в теле цикла, вы можете заменить его на:

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

Ответ 2

Этот БЛОГ сохранил мою жизнь.

Инкрементирование

for i in 0 ..< len {

}

уменьшающимся

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

}

ПОСЛЕДОВАТЕЛЬНОЕ УКАЗАНИЕ

Использование где

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

}

Используя переход к или через

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

}

Ответ 3

в Swift 3 это была ошибка

была опубликована какая-то общая замена, и просто добавьте

Для Swift 3 и нужно изменить "индекс"

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

Ответ 4

У меня был успех со следующим. Вы можете использовать цикл for следующим образом: обратите внимание, что цикл for включен, поэтому вам может потребоваться проверить, что len действительно больше 0:

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

Или вы можете использовать это:

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

Кстати, XCode 7.x помогает вам добраться туда, но это двухэтапный процесс. Сначала вам нужно изменить оператор инкремента от (скажем) я ++ до я + = 1, а затем предупреждение XCode поможет вам изменить цикл.