我已将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
}
答案 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,需要更改“索引”
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警告可帮助您修改循环。