【问题标题】:What does the exclamation mark mean in an Objective-C if statement?Objective-C if 语句中的感叹号是什么意思?
【发布时间】:2011-07-04 22:04:01
【问题描述】:

我想知道if(!anObject) 中的感叹号是什么意思。

【问题讨论】:

  • ! 是逻辑 NOT 一元运算符。我强烈建议您在尝试编写实际代码之前阅读一本关于 Objective C 的介绍性书籍。
  • 这真的不是关于 Objective C,而是几乎所有的编程语言。
  • 谢谢,保罗!我正在阅读Objective C,只做一些代码来记住一些东西。它确实有帮助。
  • 这就是我的实际想法——那个!是一个 NOT 运算符,但是当我离开第一个时,如果它实际上不应该添加操作数,那怎么会呢?
  • 因为你的逻辑是倒退的。

标签: objective-c logical-operators boolean-expression


【解决方案1】:

它是布尔非运算符,也称为否定。

!true == false;
!false == true;

【讨论】:

  • 是的,但是如果你只留下这个 if (![txtOperator.text isEqualToString: @"+"]) { int sum=a+b; [结果集文本:[NSString stringWithFormat:@"%d", sum]]; } 它实际上确实添加了数字。当据我了解它不应该。
【解决方案2】:

Logical NOT 运算符,即if( thisThisIsNotTrue ) { doStuff }

【讨论】:

  • 谢谢!这就是我实际上的想法——那个!是一个 NOT 运算符,但是为什么当我只留下第一个“if”部分时,它实际上会在不应该添加操作数的时候添加操作数?
【解决方案3】:

这是一个 C 运算符,简单的意思是“不”。所以 !YES == NO 和 !NO == YES 都是正确的陈述。例如,if (![txtOperator.text isEqualToString: @"+"]) 检查 txtOperator.text 是否不等于 @"+"。

【讨论】:

  • 正如我之前在 cmets 中所写的,它实际上在不应该添加的时候添加了 NOT 运算符。
  • 正如上面的 cmets 所指出的,您的逻辑是“倒退”的。 if(!thisValueIsFalse) { //code here will execute } 所以你的第一个if 语句只有在txtOperator.text 不是(!)@“+”时才会执行,显然不是正确的行为。您的代码中不需要 !。
【解决方案4】:

如果它总是添加,那么你的字符串永远不会是“+”。

除非 txtOperator.txt 完全等于 @"+",否则您所拥有的逻辑将始终添加 a+b。

有趣的是,如果你确实传递了一个加号,它总是会减去,只有前两种情况会被击中,因为如果第一种不正确,那么第二种总是会。

基本上,把所有的“!”都去掉......

【讨论】:

    【解决方案5】:

    正如每个人都提到的只是一个 NOT 运算符,我相信可能会让你感到困惑的是括号 [],Objective C,来自一种叫做 smalltalk 的语言,它使用发送消息的方法来发送对象,使用括号发送该消息。消息是真正的函数。

    【讨论】:

    • 括号实际上或多或少是清楚的,但还是谢谢你!
    【解决方案6】:

    您不应该添加“!”到“if”中条件的开始。您的代码说如果运算符的文本不是 +,则添加等等。你的代码应该是这样的;

    -(IBAction) 计算结果 {

    a = [txtOperand1.text intValue];
    b = [txtOperand2.text intValue];
    
    if ([txtOperator.text isEqualToString: @"+"]) {
        int sum=a+b;
        [result setText: [NSString stringWithFormat:@"%d", sum]];
    
    } else if ([txtOperator.text isEqualToString: @"-"]) {
        int sum=a-b;
        [result setText: [NSString stringWithFormat:@"%d", sum]];
    }
    else if  ([txtOperator.text isEqualToString: @"/"]) {
        int sum=a/b;
        [result setText: [NSString stringWithFormat:@"%d", sum]];
    
    }
    else if  ([txtOperator.text isEqualToString: @"*"]) {
        int sum=a * b;
        [result setText: [NSString stringWithFormat:@"%d", sum]];
    
    
    }
    else [result setText:@"nothing"]; 
    

    【讨论】:

      【解决方案7】:

      那么它在这样的语句中的用法(取自在线课程示例):

      (在本例中,按下按钮并单击该按钮后,下面的代码会在默认状态和选定状态之间“切换”):

      - (IBAction)flipCard:(UIButton *)sender
      {
          sender.selected = !sender.isSelected;
      }
      

      【讨论】:

      • 没关系,我看了Apple的文档后,isSelected返回一个BOOL,所以相当于说:
      猜你喜欢
      • 1970-01-01
      • 2014-07-23
      • 2011-01-11
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      相关资源
      最近更新 更多