【问题标题】:What am I doing wrong with this conditional statement using a UILabel in iOS? [duplicate]我在 iOS 中使用 UILabel 这个条件语句做错了什么? [复制]
【发布时间】:2013-04-30 19:29:09
【问题描述】:

我在 Xcode 中使用 UILabel 的条件语句做错了什么?

过度简化的示例,但我正在尝试更改 UILabel 相对于 UILabel 中的文本的内容。

-(IBAction)answerQuestion:(id)sender{
    NSString *startingLableContent = @"Do dogs bark?";
    NSString *answer = @"Yes.";
    NSString *askAnother = @"What else do you want?";
    if (mainLable.text == startingLableContent) {
        mainLable.text = answer;
    }else if (mainLable.text == answer){
        mainLable.text = askAnother;
    }
}

【问题讨论】:

  • 您是否尝试搜索“Objective-C 比较字符串”?
  • 当他没有意识到自己做错了什么时,他怎么知道要搜索“Objective-C 比较字符串”?
  • 好吧,如果在 Objective-C 中比较两个字符串并没有给出预期的结果,这对我来说似乎很自然。
  • @MartinR 也许这就是为什么你有 28k 的声誉而不是 4 :)

标签: ios objective-c uilabel


【解决方案1】:

您应该使用isEqualToString 比较它们

像这样:

if ([mainLable.text isEqualToString:startingLableContent]) 

否则您将测试内存位置而不是内容。

【讨论】:

  • 从技术上讲,在这种情况下你也可以使用isEqual,但我不会。
【解决方案2】:

在 Objective-C 中比较字符串,使用 isEqualToString

-(IBAction)answerQuestion:(id)sender{
    NSString *startingLableContent = @"Do dogs bark?";
    NSString *answer = @"Yes.";
    NSString *askAnother = @"What else do you want?";
    if ([startingLableContent isEqualToString:mainLable.text]) {
        mainLable.text = answer;
    }else if ([answer isEqualToString:mainLable.text]){
        mainLable.text = askAnother;
    }
}

【讨论】:

    【解决方案3】:

    试试这个:

    if ([mainLable.text isEqualToString:startingLableContent]) {
    // do stuff
    }
    

    【讨论】:

      【解决方案4】:

      ==

      事实证明,你不能只说if (someString == someOtherString)。它几乎总是会返回NO

      这与字符串在内存中的存储位置有关。您可以将== 与 int's 和 double's 以及诸如此类的东西一起使用,但是对于 NSString's,您需要这样做:

      if ([mainLabel.text isEqualToString:someOtherString])

      因此,您的方法应该如下所示:

      -(IBAction)answerQuestion:(id)sender{
          NSString *startingLableContent = @"Do dogs bark?";
          NSString *answer = @"Yes.";
          NSString *askAnother = @"What else do you want?";
          if ([mainLable.text isEqualToString:startingLableContent]) {
              mainLable.text = answer;
          }else if ([mainLable.text isEqualToString:answer]){
              mainLable.text = askAnother;
          }
      }
      

      【讨论】:

      • 如果它们都指向同一个 NSString 对象,== 将返回 true。
      • @MarcusAdams 这种情况多久发生一次?如果这种情况发生在您的现实世界中,我建议您暂时远离雷暴。如果编译器在编译时知道它是同一个字符串,它会自动将字符串指向其他字符串。否则,好吧....
      • 如果你在编译时就知道它们是相等的,你就不会这样做了。这将用于运行时检查,并且有很多理由这样做。头发的答案是正确的,而且是第一个。
      【解决方案5】:

      您比较的是指针,而不是实际的字符串。如果要比较字符串,请考虑改用isEqualToString

      【讨论】:

        猜你喜欢
        • 2021-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        • 1970-01-01
        相关资源
        最近更新 更多