非逻辑运算符

Not logical operator

我需要帮助来理解以下代码。 为什么即使 !test 等于 true 也会打印“yes”。 谢谢


var test: Bool = false

if !test  {
    print("yes")
}

if !test == true  {
    print("oky")
}

print(!test)


Console:

yes
oky
true

测试等于假,如第一行中所定义。

非运算符 (!) returns 如果语句为假则为真,如果语句为真则为假。

由于 test 等于 false,!test 等于 true。

if (!test) 和 if (!test == true) 两个条件都满足,因为 !test 为真,所以打印文本。

因为如果if之后的条件为真,命令就会被执行。

这些行是等价的:

if !test  {

if !test == true  {

我认为您可能将 test 的值与 !test 的值混淆了。 Not 运算符否定它所作用的任何值,在本例中为变量 test.

  • “测试”变量定义为默认值 'false'。
  • “if !test”等于“if !test == true”,在这两种情况下,您的测试都被否定,这意味着 'false' 变为 'true',这就是执行打印的原因。

我想补充一点,有些开发人员很难阅读负逻辑。以下是此类逻辑表达式的一些示例。

需要时间处理的逻辑示例::

  • view.isHidden = !isLoading
  • view.isHidden = !hasData
  • view.isHidden = !canAdd
  • view.idHidden = !(data?.isEmpty ?? true)
  • view.isHidden = !hasChanges

可能的解决方案是:

  • 在视图上创建“isVisible”
  • 使用if-else

有一篇威胁到主题的好文章in-depth:

Don’t ever not avoid negative logic

If you want to be nice to people with a challenged relationship with boolean logic, try to avoid negative formulations and negations.