为什么我们不能在Swift中使用带有增量运算符的for循环

时间:2019-10-03 07:45:01

标签: ios swift

代替使用:

for (n = 1; n <= 5; n++) {
  print(n)
}

为什么我们在Swift中使用以下构造?

for n in 1...5 {
    print(n)
}

//输出:1 2 3 4 5

1 个答案:

答案 0 :(得分:2)

  

“我当然愿意考虑放弃C样式的for循环。   IMO,这是Swift很少使用的功能   重量。删除它们的许多原因与基本原理一致   用于删除-和++。 “

-克里斯·拉特纳(Chris Lattner)

有人建议增加https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md

  

这些操作员增加了学习Swift的负担   编程语言-或您不知道的任何其他情况   这些运算符使用不同的语言。

     

它们的表达优势极小-x ++比x短很多   + = 1。

     

Swift已经偏离了C,因为=,+ =和其他   类似赋值的操作会返回Void(出于多种原因)。   这些运算符与该模型不一致。

     

Swift具有强大的功能,可消除许多常见原因   您可能会在其他语言中以C风格使用++ i for循环,所以这些是   在编写良好的Swift代码中相对较少使用。这些   功能包括for-in循环,范围,枚举,映射等。

     

实际使用这些运算符的结果值的代码通常是   会使代码的阅读器/维护者感到困惑和微妙。他们鼓励   “过于棘手”的代码可能很可爱,但很难理解。

     

尽管Swift具有明确定义的评估顺序,但任何代码   依赖它(例如foo(++ a,a ++))即使它   定义明确。

     

这些运算符适用于相对较少的类型:整数和   浮点标量和类似迭代器的概念。他们不适用   到复数,矩阵等。

     

最后,这些不符合“如果我们还没有这些,   我们会将它们添加到Swift 3吗?”

关于循环

https://github.com/apple/swift-evolution/blob/master/proposals/0007-remove-c-style-for-loops.md

  

for-in和stride都使用   快速一致的方法,而不必与传统术语捆绑在一起。

     

使用for循环存在明显的表达劣势   与简洁相比

     

for循环实现不适合与   集合和其他核心Swift类型。

     

for循环鼓励使用一元增量器和减量器,   它将很快从该语言中删除。

     

以分号分隔的声明提供了陡峭的学习曲线   来自非类C语言的用户

     

如果for循环不存在,我怀疑它将被考虑用于   包含在Swift 3中。