将int与string进行比较

时间:2012-12-09 21:11:54

标签: iphone objective-c ios nsstring int

  

可能重复:
  Understanding NSString comparison in Objective-C

我想比较一个int和一个字符串,但我的代码不起作用。这是我的代码:

NSLog(@"enterPressed was called");
int answer = firstNumber + secondNumber;
NSLog(@"Real Answer: %d", answer);

NSString *numberFromTextField = inputTextField.text;
NSLog(@"Number From Text Field: %@", numberFromTextField);

if (numberFromTextField == [NSString stringWithFormat:@"%d", answer]) {
    NSLog(@"Correct!");
}

这是控制台:

  

2012-12-09 13:10:55.087 MathQuiz [10728:c07] enterPressed被称为

     

2012-12-09 13:10:55.087 MathQuiz [10728:c07]真实答案:60

     

2012-12-09 13:10:55.088 MathQuiz [10728:c07]文字字段数:60

为什么不说“正确!”?

2 个答案:

答案 0 :(得分:2)

您不能使用==来比较两个Objective-C对象,除非您想知道两个对象是否相同(即==的两边指的是完全相同的对象,而不是两个具有相同值的不同对象。)

要比较字符串是否相等,您必须使用:

if ([str1 isEqualToString:str2])

// or, compare to a constant string:

if ([str1 isEqualToString:@"String 2"])

// or, compare to a string made up on the spot:

if ([str1 isEqualToString:[NSString stringWithFormat:@"%d", answer])

但是,在您的场景中,最好比较两个整数而不是两个字符串,所以要做到这一点,您需要将字符串从文本字段转换为整数:

int num = [numberFromTextField intValue];

if (num == answer)
{
    NSLog(@"Correct!");
}

请注意,当字符串不包含有效数字时,intValue将返回0,因此如果answer为0,并且用户输入的数字无效,则将确定为在技​​术上不正确。在以任何方式将输入与NSNumberFormatter进行比较之前,请考虑使用NSScanner甚至是answer来确定输入是否有效。

答案 1 :(得分:1)

您需要将其比较为

if ([numberFromTextField intValue] == answer)

(numberFromTextField == [NSString stringWithFormat:@"%d", answer])正在比较两个字符串的内存地址。不是价值观。以下内容将为您提供正确的值,

if ([numberFromTextField isEqualToString:[NSString stringWithFormat:@"%d", answer]])