对于任何对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
}
关于将NOT
与OR
一起使用,我缺少什么?
答案 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
,因为这个名字不能是“约翰”和“迈克尔“在同一时间。”