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

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

Я попытался изменить инструкцию 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 } 

C-стиль for цикла устарел в Swift 3. Вы можете продолжать использовать его некоторое время, но они, безусловно, исчезнут в будущем.

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

 for i in 0.. 

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

 for _ in 0.. 

Этот БЛОГ спас мне жизнь.

Приращение

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

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

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

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

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

У меня был успех со следующим. Вы можете использовать цикл 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 помогает вам добраться туда, но это двухэтапный процесс. Сначала вам нужно сменить оператор инкремента с (скажем) i ++ на i + = 1, а затем предупреждение XCode поможет вам изменить цикл.

  • Пользовательские предупреждения компилятора
  • Каковы допустимые символы для имен макросов?
  • Что такое i = (i, ++ i, 1) + 1; делать?
  • Динамическая переадресация: подавление предупреждения о неполной реализации
  • Как преднамеренно вызвать пользовательское предупреждение о компиляторе java?
  • Игнорировать все предупреждения в определенном файле, используя LLVM / Clang
  • Что случилось с тысячами предупреждений в стандартных заголовках в MSVC -Wall?
  • Как включить (буквально) ВСЕ предупреждения GCC?
  • Что такое предупреждающий вывод «Игнорирование InnerClasses» во время компиляции?
  • Использует ли #pragma warning push / pop правильный способ временного изменения уровня предупреждения?
  • Давайте будем гением компьютера.