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

nal*_*las 0 objective-c

因此,对于具有良好Objective-C知识的人来说,这可能是一个愚蠢的问题.

我有一个if-statement在我检查,如果NSString等于任何东西,但 "约翰"或"迈克尔".

我尝试了以下代码,但它没有用.

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

但这确实有效

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

与我NOT一起使用时我缺少什么OR

Sul*_*han 7

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

!([selectedName isEqualToString:@"John"] || [valtNamn isEqualToString:@"Michael"])
Run Code Online (Sandbox Code Playgroud)

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

或者,换句话说(参见AND而不是OR)

![selectedName isEqualToString:@"John"] && ![valtNamn isEqualToString:@"Michael"]
Run Code Online (Sandbox Code Playgroud)

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

这应该是显而易见的,但它也在德摩根定律的逻辑中正式描述

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

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

if (!isJohn && !isMichael) {
  //do something
}
Run Code Online (Sandbox Code Playgroud)

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