【问题标题】:Swift ++ & -- deprecated. Alternatives for a loop [duplicate]Swift ++ & -- 已弃用。循环的替代方案[重复]
【发布时间】:2016-03-25 16:43:28
【问题描述】:

++ 和 -- 已在 Swift 最新版本中弃用,并将在 Swift 3 中删除。

我有这段代码目前正在运行,我想更新它,但我不知道如何重写它。任何帮助将不胜感激。

for var i = 2; i <= remarkIndex; ++i {
    if containsWind(metarArray[i]) {
        metarDict.updateValue(metarArray[i], forKey: "winds")
    }
}

我意识到 Swift 喜欢用不同的方式制作循环,但我对它缺乏经验。当我编写所​​有这些代码时,我只是使用了我习惯的 C++ 方式。希望有一个示例,我知道我可以在我的代码中应用。

【问题讨论】:

  • 会不会增加i的值,然后返回增加的值?
  • metarArray[2...remarkIndex].filter { containsWind($0) }.forEach { metarDict.updateValue($0, forKey: "winds" }

标签: swift loops


【解决方案1】:

为了完整起见,让我们也为内部块展示一种更实用的方法:

metarArray[2...remarkIndex]
   .filter(containsWind)
   .forEach { metarDict.updateValue($0, forKey: "winds") }

【讨论】:

  • 哦,天哪,这很优雅,看起来也少了很多错误。需要坐下来学习这些语法选项。非常感谢您的帖子。
  • 这当然是最快捷的方式,但请注意,它需要额外的费用,因为我们必须在切片中循环两次。但是,在您的实际代码中,这笔费用可能可以忽略不计。
  • @matt 我完全同意函数式方法并不总是最好的方法。
  • 但它最漂亮!
【解决方案2】:

像这样:

for i in 2...remarkIndex

无论如何,这都是你应该一直做的。

但是,由于您想要对 i 做的唯一事情就是索引到 metarArray,因此循环遍历 metarArray 会更好本身

for item in metarArray[2...remarkIndex]

不需要索引!

【讨论】:

  • 感谢您直截了当的简短回答。我在学习!胡扎。
  • 但更好的是,因为您只想与metarArray[i] 一起工作,所以可以循环通过metarArray 本身。完全没有必要连续索引到数组中。
  • 删除外循环确实很有意义,因为您提到了它。我很欣赏你的评论。
  • 此外,您想从索引 2 开始这一事实也有异味。但这是另一个问题。
  • 你甚至可以使用where containsWind(item)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 2020-11-07
相关资源
最近更新 更多