swift2 修复Swift 3中的警告“语句的C样式已过时”

mctunoxg  于 2022-11-06  发布在  Swift
关注(0)|答案(4)|浏览(174)

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

ltskdhd11#

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
}
y1aodyip

y1aodyip2#

这个BLOG救了我的命。

不断增加

for i in 0 ..< len {

}

递减

for i in (0 ..< len).reverse() {

}

非顺序索引

使用where

for i in (0 ..< len) where i % 2 == 0 {

}

使用大步走向或穿过

for i in 0.stride(to: len, by: 2) {

}
bq3bfh9z

bq3bfh9z3#

在Swift 3中这是个错误
发布了一些常规替换,只需添加

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

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

t1qtbnec4#

我已经成功地完成了下面的代码,你可以按照如下方式使用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 * 确实 * 帮助你达到这个目标,但是它是一个两步的过程。首先你必须把你的增量运算符从(比如说)i++改为i += 1,然后XCode警告帮助你修改循环。

相关问题