代码之家  ›  专栏  ›  技术社区  ›  SNos

修复Swift 3中的警告“C-style for Statement is deprecated”

  •  39
  • SNos  · 技术社区  · 8 年前

    我有更新 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 回复  |  直到 8 年前
        1
  •  77
  •   Code Different    6 年前

    C型 for 循环在Swift3中已被弃用。您可以继续使用它一段时间,但它们肯定会在将来消失。

    您可以将循环改写为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
    }
    
        2
  •  28
  •   Thomás Pereira    8 年前

    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) {
    
    }
    
        3
  •  12
  •   d0ye    8 年前

    在Swift 3中,这是一个错误

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

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

    for var index in stride(from: 0, to: 10, by: 1){}
    
        4
  •  6
  •   JeremyP    8 年前

    我在以下方面取得了成功。您可以按如下方式使用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警告将帮助您修改循环。