Swift编译器优化'for'循环

时间:2016-03-20 09:00:28

标签: swift for-loop

我有一个'for'循环,类似于:

freq

当天,当我在FORTRAN中编码时,我被告知这是一种非常低效的编码大型'for'循环的方法。

Swift编译器是否识别出不变的限制并预先计算n - 1?

1 个答案:

答案 0 :(得分:2)

我认为答案是肯定的。

1...n - 1代表Range个对象。它是Range的字面值。因此,当编译到达循环并看到文字时,它会认为

  

您似乎想要创建一个新的Range<Int>对象!干得好!嗯...所以我猜i的类型为Int ...

等等。

这意味着在创建对象时会评估n - 1。它保持这种状态,而不是第二次评估它。这段代码通过不打印一个问题证明了这一点:

var n = 10
for i in 1...n - 1 {
    n = 2
    print("Hello")
}

所以是的。

注意:

  • 在这种情况下,使用1..<n代替1...n - 1会更好,它们是相同的。
  • Apple实际上建议您使用此方法而不是C-style for循环。
  • 将在Swift 3
  • 中删除C风格的for循环