0

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

我有一个if-statement检查是否NSString等于“约翰”或“迈克尔”的地方。

我尝试了以下代码,但没有成功。

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

然而这确实有效

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

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

4

1 回答 1

7

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

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

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

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

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

(不是约翰,也不是迈克尔)

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

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

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

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

您所写的条件实际上意味着“如果不是迈克尔或约翰”,或“不是(约翰和迈克尔)”,并且总是评估为,YES因为名称不能同时是“约翰”和“迈克尔”。

于 2013-05-06T16:38:58.227 回答