【发布时间】:2015-07-05 22:26:39
【问题描述】:
我在工作中有一个小小的争论:在运行它的项目之前快速计算数组的大小是一个好习惯吗?什么是更好的代码实践:
选项 A:
func setAllToFalse() {
for (var i = 0; i < mKeyboardTypesArray.count; i++ ) {
self.mKeyboardTypesArray[i] = false
}
}
或选项 B:
func setAllToFalse() {
let typesCount = mKeyboardTypesArray.count
for (var i = 0; i < typesCount; i++ ) {
self.mKeyboardTypesArray[i] = false
}
}
当然,如果我在循环期间不更改数组的话。
我确实查看了文档,其中指出:
循环执行如下:
第一次进入循环时,初始化表达式为 评估一次,以设置所需的任何常量或变量 为循环。评估条件表达式。如果它评估 为false,循环结束,for之后代码继续执行 循环的右大括号 (})。如果表达式的计算结果为真,则代码 通过执行大括号内的语句继续执行。 执行完所有语句后,增量表达式为 评估。它可能会增加或减少计数器的值,或者 根据 陈述的结果。增量表达式之后 求值,执行返回到第 2 步,条件表达式 再次评估。
【问题讨论】:
-
我认为你要么必须研究生成的汇编代码,要么等到 Swift 开源。 Swift 编译器应该非常非常非常聪明,有很多优化。此外,如果您确定数组不会改变,您可以使用:
for val in array { ... },这肯定是最快的方法。 -
@Kametrixom,你是对的。但是你不能使用上面示例中的 for.. in 语法,因为你得到的 val 实际上是一个 let 变量,它不能改变,所以你必须使用更长的语法。
-
您可以使用
for var val in array { ... };)。但我知道你的意思,你可以使用for i in 0..<array.count { ... },它绝对不会每次都调用.count -
但我完全忘记了 0..
-
是的,我真的很喜欢 Swift 有很多不同的 for 循环语法(es?)