以下语句导致编译器错误:类型'()'不符合协议'LogicValue'。在第二行
var b=1
if b!=0
{
println("not 0")
}
但是
var b=1
if (!(b==0))
{
println("not 0")
不会导致编译错误。
为什么使用!=
运算符无法比较0,但可以使用==
运算符进行比较?处理此问题的最佳方法是什么?
答案 0 :(得分:3)
这可能是由于!=
运算符周围缺少空格--Swift对空白非常挑剔,并根据周围的空白区别对运算符进行解释。
language specification描述了各种规则,尽管从这些规则中并不特别明显b!=0
应该无效。
所以你可能需要说b != 0
而不是b!=0
答案 1 :(得分:0)
一个漂亮而简单的b != 0
有什么问题?它易于阅读且易于实施。
第二个选项之所以有效,是因为!
在这里意味着“不是”。因此,如果b等于0,则语句将为“非True”或“False”。
答案 2 :(得分:0)
这是一个缺少空白的案例:
var b=1
if b != 0 {
println("not 0")
}
编译好。