if语句与OR和NOT条件相结合

时间:2013-05-06 16:36:42

标签: objective-c

对于任何对Objective-C有深入了解的人来说,这可能是一个愚蠢的问题。

我有一个if-statement,我会检查NSString是否等于但是“John”或“Michael”。

我尝试了以下代码但它无效。

if (![selectedName isEqualToString:@"John"] || ![valtNamn isEqualToString:@"Michael"]) {
    // DO SOMETHING    
}

然而这确实有效

if ([selectedName isEqualToString:@"John"] || ![valtNamn isEqualToString:@"Michael"]) {
    // DONT DO ANYTHING    
} else {
    //DO SOMETHING  
}

关于将NOTOR一起使用,我缺少什么?

1 个答案:

答案 0 :(得分:7)

否定条件“约翰或迈克尔”应该是

!([selectedName isEqualToString:@"John"] || [valtNamn isEqualToString:@"Michael"])

(不是(约翰或迈克尔))

或换句话说(参见AND代替OR)

![selectedName isEqualToString:@"John"] && ![valtNamn isEqualToString:@"Michael"]

(不是约翰而不是迈克尔)

这应该是显而易见的,但它也在De Morgan's laws

的逻辑中正式描述

要理解这一点,您可以稍微简化一下:

BOOL isJohn = [selectedName isEqualToString:@"John"];
BOOL isMichael = [selectedName isEqualToString:@"Michael"];

if (!isJohn && !isMichael) {
  //do something
}

你所写的条件实际上意味着“如果它不是迈克尔或者不是约翰”,或者“不是(约翰和迈克尔)”并且总是评价为YES,因为这个名字不能是“约翰”和“迈克尔“在同一时间。”