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