Fix warning "C-style for Statement is deprecated" in Swift 3
Solution 1
C-style for
loop has been deprecated in Swift 3. You can continue using it for a while, but they will certainly disappear in the future.
You can rewrite your loop to Swift's style:
for i in 0..<len {
let length = UInt32 (letters.length)
let rand = arc4random_uniform(length)
randomString.appendFormat("%C", letters.characterAtIndex(Int(rand)))
}
Since you don't use i
at all in the loop's body, you can replace it with:
for _ in 0..<len {
// do stuffs
}
Solution 2
This BLOG saved my life.
INCREMENTING
for i in 0 ..< len {
}
DECREMENTING
for i in (0 ..< len).reverse() {
}
NON-SEQUENTIAL INDEXING
Using where
for i in (0 ..< len) where i % 2 == 0 {
}
Using striding to or through
for i in 0.stride(to: len, by: 2) {
}
Solution 3
in Swift 3 it's been an error
some general replacement was posted and just add
For Swift 3 and need to change the "index"
for var index in stride(from: 0, to: 10, by: 1){}
Solution 4
I've had success with the following. You can use the for loop as follows - note that the for loop is inclusive so you may need to check that len is actually greater than 0:
for i in 0...len - 1 {
let length = UInt32 (letters.length)
let rand = arc4random_uniform(length)
randomString.appendFormat("%C", letters.characterAtIndex(Int(rand)))
}
Or you can use this:
for i in 0 ..< len {
let length = UInt32 (letters.length)
let rand = arc4random_uniform(length)
randomString.appendFormat("%C", letters.characterAtIndex(Int(rand)))
}
BTW it appears XCode 7.x does help you to get there but it's a two step process. First you have to change your increment operator from (say) i++ to i += 1 and then XCode warning helps you modify the loop.
SNos
SALVO NOSTRATO, BORN IN ITALY AND MOVED TO LONDON IN 2005, IS AN INDEPENDENT AND AMBITIOUS INDIVIDUAL DRIVEN BY A PASSION FOR MUSIC, SOUND, PHOTOGRAPHY, AND THE ARTS. HE IS CURRENTLY STUDYING FOR A DEGREE IN “SOUND ARTS AND DESIGN” AT LONDON COLLEGE OF COMMUNICATION. SALVO HAS ALSO STUDIED AT GOLDSMITH UNIVERSITY, LONDON, GAINING A DIPLOMA IN MUSIC PERFORMANCE FOLLOWED BY SOUND ENGINEERING AND MUSIC PRODUCTION DIPLOMA EARNED AT ISLINGTON MUSIC WORKSHOP (IMW), LONDON, UK. BEING A MUSICIAN FROM AN EARLY AGE HE HAS CREATED MUSIC THAT SPANS MANY DIFFERENT GENRES AND HE OWNS A LARGE COLLECTION OF INSTRUMENTS AND RECORDING EQUIPMENT. SALVO’S TECHNICAL KNOWLEDGE HAS ALLOWED HIM TO BUILD HIS OWN HIGH QUALITY STUDIO WHERE HE USES SOFTWARE FOR AUDIO COMPOSITIONS SUCH AS PROTOOLS HD, PROTOOLS LE AND LOGICPRO 9 SUITES IN WHICH HE IS HIGHLY PROFICIENT.
Updated on March 20, 2020Comments
-
SNos about 4 years
I have update
Xcode
to 7.3 and now I have a warning to the function that I use to create random strings.I have tried to change the
for
statement withfor (i in 0 ..< len){...}
however, the warning became an error.How can I remove the warning?
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 }
-
d0ye over 7 yearsit did worked 4 changing the index , seems not work for now :( 4 Changing the index maybe we should replace for loop with a while loop :( like ` var index = 0 while(index < len)`
-
Amr Angry about 7 yearsi try this solution but i keep give a warning that idex is never mutated so you should use let instead of var ,but you can't use let in mutate case
-
d0ye about 7 years@AmrAngry just
for index in stride(from: 0, to: 10, by: 1){}
:) -
Alexander about 6 yearsYou should definitely avoid using a
where
clause in a situation where there is such a clear cut pattern.0.stride(to: len, by: 2)
halves the number of jumps the processor has to do. -
gman over 2 yearswhen I try the last one I get
value of type 'Int' has no member 'stride'