修复 Swift 中的警告 "C-style for Statement is deprecated" 3
Fix warning "C-style for Statement is deprecated" in Swift 3
我已将 Xcode
更新到 7.3,现在我对用于创建随机字符串的函数发出警告。
我试图用 for (i in 0 ..< len){...}
更改 for
语句,但是警告变成了错误。
如何删除警告?
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-style for
loop has been deprecated in 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
}
我在以下方面取得了成功。您可以按如下方式使用 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 警告会帮助您修改循环。
这 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) {
}
在 Swift 3 这是一个错误
一些通用替换已发布,只需添加
对于Swift3,需要改成"index"
for var index in stride(from: 0, to: 10, by: 1){}
我已将 Xcode
更新到 7.3,现在我对用于创建随机字符串的函数发出警告。
我试图用 for (i in 0 ..< len){...}
更改 for
语句,但是警告变成了错误。
如何删除警告?
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-style for
loop has been deprecated in 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
}
我在以下方面取得了成功。您可以按如下方式使用 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 警告会帮助您修改循环。
这 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) {
}
在 Swift 3 这是一个错误
一些通用替换已发布,只需添加
对于Swift3,需要改成"index"
for var index in stride(from: 0, to: 10, by: 1){}