【问题标题】:#warning: C-style for statement is deprecated and will be removed in a future version of Swift [duplicate]#warning:不推荐使用 C 样式的 for 语句,并将在 Swift 的未来版本中删除 [重复]
【发布时间】:2016-07-10 11:04:01
【问题描述】:

我只是用 swift 2.2 下载了一个新的 Xcode (7.3)。

它有一个警告:

C 风格的 for 语句已弃用,并将在 Swift 的未来版本中删除。

如何解决此警告?

【问题讨论】:

标签: ios objective-c swift swift2.2


【解决方案1】:

删除for init; comparison; increment {} 并轻松删除++--。并使用 Swift 漂亮的 for-in 循环

   // WARNING: C-style for statement is deprecated and will be removed in a future version of Swift
   for var i = 1; i <= 10; i += 1 {
      print("I'm number \(i)")
   }

斯威夫特 2.2:

   // new swift style works well
   for i in 1...10 {
      print("I'm number \(i)")
   }  

对于递减指数

  for index in 10.stride(to: 0, by: -1) {
      print(index)
  }

或者你可以使用reverse()like

  for index in (0 ..< 10).reverse() { ... }

对于浮点类型(there is no need to define any types to index)

 for index in 0.stride(to: 0.6, by: 0.1) {
     print(index)  //0.0 ,0.1, 0.2,0.3,0.4,0.5
 }  

Swift 3.0:

来自Swift3.0,Strideable 上的stride(to:by:) 方法已替换为免费函数stride(from:to:by:)

for i in stride(from: 0, to: 10, by: 1){
    print(i)
}

Swift 3.0中的递减索引,可以使用reversed()

for i in (0 ..< 5).reversed() {
    print(i) // 4,3,2,1,0
}


除了for eachstride(),你可以使用While Loops

var i = 0
while i < 10 {
    i += 1
    print(i)
}

Repeat-While Loop:

var a = 0
repeat {
   a += 1
   print(a)
} while a < 10

查看The Swift Programming Language Guide中的控制流

【讨论】:

  • 这种样式我们可以,但是如果我们想从数组中循环并且如果该数组的值为零,则会发生崩溃
  • @sony:请参阅this Q&A 了解 C 样式循环的替代方案,它允许长度为零的数组(无需额外的 if 语句)。
  • 是的,知道了……但它给了你解决方案i in &lt;max(0,foo.count-1)
  • @ElCaptain:是的,有几种方法可以避免对可能为零的数组成员进行循环,max(...) 解决方案,或.forEach{ ... },或from.stride(to:by) 等。乐于提供帮助.
  • @EICaptain:如何将它与 CGFloat 一起使用?到目前为止,可以为索引设置类型。
【解决方案2】:

对于这种“for”循环:

for var i = 10; i >= 0; --i {
   print(i)
}

你可以写:

for i in (0...10).reverse() {
    print(i)
}

【讨论】:

    【解决方案3】:

    块引用

    改用这个

    if(myarr.count)
    {
        for i in 1...myarr?.count {
          print(" number is \(i)")
        }
    }
    

    【讨论】:

    【解决方案4】:

    我在这段代码中遇到了同样的错误:

    for (var i = 1; i != video.getAll().count; i++) {
        print("show number \(i)")
    }
    

    当你尝试用 Xcode 修复它时,你会没有运气......所以你需要使用新的 swift 样式(for in loop):

    for i in 1...video.getAll().count {
        print("show number \(i)")
    }
    

    【讨论】:

    • 减量怎么用?
    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    相关资源
    最近更新 更多