好奇这个if语句有什么问题?

时间:2010-12-11 09:54:18

标签: iphone objective-c

有人可以解释这个“if声明”有什么问题吗?我明白了:

  

“左值作为赋值的左操作数”。

这不起作用:

if ([[prepDataArray objectAtIndex:iNDEX] boolValue] = YES) {
        NSLog(@"HARD");
    }

虽然这有效:

diffQ = [[prepDataArray objectAtIndex:iNDEX] boolValue];
    if (diffQ = YES) {
        NSLog(@"HARD");
    }

我确实意识到问题在哪里,'左值'表示我需要在左侧有不同的东西,但我不知道为什么以及如何在'if'语句中做我想要的尝试第一个例子。

如果有人能给我一个提示,我将不胜感激: - )

2 个答案:

答案 0 :(得分:7)

if ([[prepDataArray objectAtIndex:iNDEX] boolValue] == YES) {
    NSLog(@"HARD");
}

它是==而不是=

第一个不起作用,因为您尝试为邮件分配BOOLYES)。第二个有效,因为您尝试将BOOL分配给diffQ。这是正确的,但不是您期望的结果(将diffQYES比较)

常见编程错误;)我已经完成了数百万次

答案 1 :(得分:2)

我完全赞同@thomas上面所说的,但让我补充一下。

请勿将bool与YES 进行比较。并不是if构造需要

if( some comparison statement ) {
      ....
}

事实并非如此。 if结构具有以下形式:

if( a boolean value) {
      ...
}

只是比较语句产生一个布尔值,所以你把它放在if语句中。 在您的情况下,boolValue已经为您提供了bool。您无需将其与YESNO进行比较。这就像做YES==YESYES==NO一样,而且完全是多余的。

只做

if ([[prepDataArray objectAtIndex:iNDEX] boolValue]) {
    NSLog(@"HARD");
}