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