Swift中能否在for循环内部定义常量?
Swift中for循环内用let定义变量的疑问解答
你看到的这段代码一点问题都没有,关键在于Swift的for循环每次迭代都会生成一个全新的作用域:
for i in 0..<n { let x = start + delta * Double(i) result += [fn(x)] } return result
每轮循环时,let x都会在当前迭代的独立作用域里重新定义——它不是整个循环里的同一个常量,而是每一轮都新创建一个x,把start + delta * Double(i)的结果赋值给它,之后在这一轮迭代里它的值不会变,完全符合let用来定义不可变常量的规则。
你预想的用var的写法虽然语法上能跑,但完全没必要:
for i in 0..<n { var x = start + delta * Double(i) result += [fn(x)] } return result
这里x被定义成变量,但整个迭代过程中根本没修改过它,用let反而更贴合代码的语义——明明白白告诉别人“这个x在这轮循环里不会变”,还能避免后续不小心改它出问题。
说白了就是:循环的每一次迭代都是独立的小环境,let x在每个小环境里只赋值一次,完全合规,而且是更稳妥的写法。
内容的提问来源于stack exchange,提问作者Ansgar
相关产品推荐
相关产品推荐

