Предупреждение об ошибке «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 поможет вам изменить цикл.

  • Будет ли оператор «variableName;» C ++ всегда оставаться без оператора?
  • Переопределить флаги компиляции для отдельных файлов
  • Пользовательские предупреждения компилятора
  • Что такое "android: allowBackup"?
  • Выборочно отключить предупреждения GCC только для части единицы перевода?
  • Что такое предупреждающий вывод «Игнорирование InnerClasses» во время компиляции?
  • предупреждение: неявное объявление функции
  • g ++ Как получить предупреждение об игнорировании возвращаемого значения функции
  • Что такое i = (i, ++ i, 1) + 1; делать?
  • Java Class.cast () против оператора трансляции
  • Interesting Posts

    Индексы MySQL – каковы наилучшие методы?

    Создание расширенного профиля пользователя

    Что такое RPC-инфраструктура и Apache Thrift?

    Genymotion, «Невозможно загрузить движок VirtualBox» на Mavericks. VBox настроен правильно

    Как я могу использовать пользовательский растровый рисунок для точки «вы здесь» в MyLocationOverlay?

    Entity Framework Code First: Как я могу создать связь «один-ко-многим» и «один-к-одному» между двумя таблицами?

    Возrotation n-й записи из запроса MySQL

    Неисправность работы с камерой в onActivityResult

    Программный доступ к свойствам пользовательского документа Excel

    перерыв петли, если Esc был нажат

    Установка цвета фона ячейки таблицы на iPhone

    Изменить таблицу MySQL для добавления комментариев к столбцам

    Как можно добавить разделительную линию в Android RecyclerView?

    Построение комбинированного armv7 / x86 apk после интеграции Crosswalk в проект Ionic

    Как объединить все две строки в одну из командной строки?

    Давайте будем гением компьютера.