9

我想使用 bool 文字,如

if (condition == @NO) {

}
else if (condition == @YES) {

{

当我尝试这个时,XCode 希望我使用 NSNumber 方法进行比较,比如 isEqualTo。有没有更简单的方法来做到这一点(没有 isEqualTo)?如果不能,我应该使用 isEqualTo、isEqualToValue 还是 isEqualToNumber?

4

5 回答 5

25

是什么condition?它是一个BOOL还是一个NSNumber


如果condition是 a BOOL,那么您不想使用@NO或根本不想使用@YES。你想说

if (condition) // test if condition is true

if (!condition) // test if condition is false

if (condition == NO) // same as previous, based on personal preference

请注意,你永远不应该说

if (condition == YES)

因为BOOL实际上并不局限于0and1作为值,它可以在 中保存任何东西char,所以如果condition不小心持有,比如说,3,那么if (condition)if (condition == YES)会表现不同。


如果conditionNSNumber,那么您仍然不想使用@NOand @YES。您只想将其转换为BOOLusing -boolValue,如

if ([condition boolValue]) // test if condition is true

if (![condition boolValue]) // test if condition is false

if ([condition boolValue] == NO) // same as previous, based on personal preference

这里的基本要点是,不要使用@NO@YES文字进行比较。这是没有意义的,也不优雅,因为你能用它们做的就是将它们转换回BOOLs。

于 2013-03-25T03:30:22.010 回答
5

假设数据类型conditionBOOL,那么你想要:

if (condition) {
    // true (YES)
} else {
    // false (NO)
}

如果条件是NSNumber然后使用:

if ([condition boolValue]) {
    // true (YES)
} else {
    // false (NO)
}

如果condition基于一些任意数字,则0视为NO并将非零视为YES

同样,如果conditionNSNumber那么做:

if ([condition intValue]) {
    // non-zero - true (YES)
} else {
    // zero - false (NO)
}

更新:基于 OP 的以下评论:

Condition 是一个布尔值,例如 if (myView.frame.size.height == 30)

这意味着实际问题想要进行以下检查:

if ((myView.frame.size.height == 30) == YES)

这是非常不寻常的。正确的做法是:

if (myView.frame.size.height == 30) {
    // true - height is 30
} else {
    // false - height is not 30
}

无需担心误报或误报。条件要么为真,要么不为真。没有第三种可能。如果条件给出错误的结果,则解决方案是修复条件。

于 2013-03-25T03:06:37.617 回答
2

您可以将@NO 保存在字典中,因为@NO 是一个对象。您不能将 NO 保存在字典中。所以在需要时使用@NO.boolValue。例如:

NSDictionary *userSetting = (NSDictionary *)[[NSUserDefaults standardUserDefaults] objectForKey:@"user"];
//Suppose you have done: userSetting[@"canWriteCode"] = @YES;
if ([userSetting[@"canWriteCode"] boolValue])
    [self helloProgrammer];
于 2014-08-13T21:42:16.937 回答
-1

condition一个NSNumber?如果是这样,只需使用:

if(condition.integerValue) {
    //condition is YES
} else {
    //condition is NO
}

顺便说一句,值为 0 表示 NO,任何其他值为 YES;

于 2013-03-25T03:07:56.727 回答
-2

您可以使用@YES.boolValue@NO.boolValue

因此,要与 bool 文字进行比较,您可以编写类似的内容(鉴于事实conditionBOOL

if (condition == @NO.boolValue) {
  // Do something
}
于 2013-03-25T03:06:57.020 回答