web-dev-qa-db-ja.com

Swift 3の「ステートメントのCスタイルは非推奨です」という警告を修正

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
}
27
SNos

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
}
57
Code Different

この [〜#〜] 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) {

}
22
Tom Calmon

in Swift 3それはエラーでした

いくつかの一般的な置換が投稿され、追加するだけです

Swift 3で、「インデックス」を変更する必要がある場合

for var index in stride(from: 0, to: 10, by: 1){}
9
d0ye

私は以下で成功しました。 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警告がループの修正に役立ちます。

5
Richard Bown