Swift分配评估无效的原因是什么?

时间:2015-12-09 07:31:14

标签: swift language-design assignment-operator

这个问题是关于 HISTORY (不是您目前对此事的看法)。

在阅读关于删除对Swift的递增/递减运算符的支持的帖子时,我读了这样的文本“Swift已经偏离C,因为=,+ =和其他类似赋值的操作返回Void(由于多种原因)”。

所以在过去的某个时候,开发人员有意识地决定将作业评估为无效。

我正在寻找历史(现在)的原因。就像这个帖子是关于Scala的历史原因一样。

1 个答案:

答案 0 :(得分:15)

至少有一个原因是在比较操作中更安全。用C,Objective-C等写作时,你写了多少次:

if (x = 2)

而不是

if (x == 2)

较新版本的编译器已针对上述情况引入了特定警告,但是多年来我的代码中缺少等号的哇哇导致难以识别的错误。

使用Swift类型系统,这不是一个问题,因为返回的值很可能不符合BooleanType协议,但如果它(if x = false),你可能仍然会遇到这些错误。很多Swift旨在消除人们遇到的错误的常见原因,包括这个。

这在Swift Programming Language一书的"Basic Operators"

下有说明
  

与C和Objective-C中的赋值运算符不同,赋值   Swift中的运算符本身不返回值。下列   声明无效:

if x = y {
    // this is not valid, because x = y does not return a value
}
     

此功能可防止使用赋值运算符(=)   当等于运算符(==)实际意图时发生意外。通过   如果x = y无效,Swift会帮助你避免这些   代码中的错误。