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
}
Cスタイルのfor
ループは、Swift 3.で非推奨になりました。しばらくの間使用し続けることができますが、将来的には確実に消滅します。
ループを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
}
この [〜#〜] blog [〜#〜] は命を救った。
[〜#〜] incrementing [〜#〜]
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) {
}
in 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 doesが表示されますが、それは2段階のプロセスです。最初に、増分演算子を(たとえば)i ++からi + = 1に変更する必要があります。次に、XCode警告がループの修正に役立ちます。