在Swift 3中修复警告“不推荐使用C语言的语句”

时间:2016-03-25 02:56:15

标签: swift for-loop swift2 compiler-warnings

我已将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
}

4 个答案:

答案 0 :(得分:54)

在Swift 3中已经弃用了C风格的for循环。你可以继续使用它一段时间,但它们肯定会在将来消失。

你可以将你的循环重写为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
}

答案 1 :(得分:18)

BLOG拯救了我的生命。

<强>递增

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) {

}

答案 2 :(得分:9)

在Swift 3中

这是一个错误

发布了一些常规替换,只需添加

对于Swift 3,需要更改“索引”

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

答案 3 :(得分:5)

我在以下方面取得了成功。您可以按如下方式使用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)))
}

BTW看来XCode 7.x 确实帮助你实现目标,但这是一个两步的过程。首先,您必须将增量运算符从(比如)i ++更改为i + = 1,然后XCode警告可帮助您修改循环。