为什么!= 0会导致编译错误

时间:2014-06-08 11:54:40

标签: swift

以下语句导致编译器错误:类型'()'不符合协议'LogicValue'。在第二行

var b=1
if b!=0
{
println("not 0")
}

但是

var b=1
if (!(b==0)) 
{
println("not 0")

不会导致编译错误。

为什么使用!=运算符无法比较0,但可以使用==运算符进行比较?处理此问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

这可能是由于!=运算符周围缺少空格--Swift对空白非常挑剔,并根据周围的空白区别对运算符进行解释。

language specification描述了各种规则,尽管从这些规则中并不特别明显b!=0应该无效。

所以你可能需要说b != 0而不是b!=0

另请参阅:Is this response from the compiler valid?

答案 1 :(得分:0)

一个漂亮而简单的b != 0有什么问题?它易于阅读且易于实施。

第二个选项之所以有效,是因为!在这里意味着“不是”。因此,如果b等于0,则语句将为“非True”或“False”。

答案 2 :(得分:0)

这是一个缺少空白的案例:

var b=1
if b != 0 {
    println("not 0")
}

编译好。