'for' 循环的 Swift 编译器优化

标签 swift for-loop

我有一个与此类似的“for”循环:

for i in 0...n - 1 {
    // do stuff, n is not changed
}

以前,当我用 FORTRAN 编写代码时,有人告诉我这是编写大型“for”循环的一种非常低效的方法。

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

最佳答案

我认为答案是肯定的。

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

It seems like that you want to create a new Range<Int> object! Here you go! Hmm... So I guess i is of type Int...

等等。

这意味着n - 1在创建对象时进行评估。它保持这种状态,而不是第二次评估它。此代码通过不只打印一个 hello 来证明这一点:

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

是的。

注意:

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

关于 'for' 循环的 Swift 编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36111869/

相关文章:

swift - 代表 RealmSwift 中的范围值?

swift - 比较两个枚举变量而不考虑它们的关联值

swift - 如何在 swift 2 中隐藏没有动画的键盘?

sql - 读取电子邮件到用户名映射的简单方法,如果存在,则只需使用该值而不是多个 IF ELSE 条件

c - 具有 NULL 条件的 for 循环,为什么 printf();执行?

swift - PromiseKit 3.0 链接

c# - 在 for 循环内声明的变量会影响循环的性能吗?

javascript - 将递增 ID 添加到数组中的 obj

vb.net - 你选择 Linq 而不是 For 循环?

ios - 如何在不使用任何模拟库的情况下模拟 iOS Swift 中的系统库?