这个问题是关于 HISTORY (不是您目前对此事的看法)。
在阅读关于删除对Swift的递增/递减运算符的支持的帖子时,我读了这样的文本“Swift已经偏离C,因为=,+ =和其他类似赋值的操作返回Void(由于多种原因)”。
所以在过去的某个时候,开发人员有意识地决定将作业评估为无效。
我正在寻找历史(现在)的原因。就像这个帖子是关于Scala的历史原因一样。
答案 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会帮助你避免这些 代码中的错误。