Предупреждение об ошибке «C-style for Statement устарел» в Swift 3
У меня есть обновление Xcode
до 7.3, и теперь у меня есть предупреждение для функции, которую я использую для создания случайных строк.
Я попытался изменить инструкцию for (i in 0 ..< len){...}
однако предупреждение стало ошибкой.
Как удалить предупреждение?
- Неразумно ли игнорировать предупреждение gcc / clang «-Смесительные скобки»?
- Что случилось с тысячами предупреждений в стандартных заголовках в MSVC -Wall?
- Использует ли #pragma warning push / pop правильный способ временного изменения уровня предупреждения?
- Как отключить предупреждения GCC для нескольких строк кода
- Как отключить неиспользуемые предупреждения переменных, выходящие из gcc в стороннем коде, который я не хочу редактировать?
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 }
- Как включить (буквально) ВСЕ предупреждения GCC?
- Как отключить предупреждения о неиспользуемом коде в Rust?
- Как преднамеренно вызвать пользовательское предупреждение о компиляторе java?
- Каковы допустимые символы для имен макросов?
- Имущество и сеттеры
- Динамическая переадресация: подавление предупреждения о неполной реализации
- Игнорировать все предупреждения в определенном файле, используя LLVM / Clang
- Могу ли я сделать предупреждение GCC о передаче слишком широких типов функций?
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 поможет вам изменить цикл.