我对Objective-C比较陌生。
我正在尝试构造一个if
语句来检查某些内容是否不等于'a'或'b',当我添加“或”部分时,它似乎不适用于声明。如果我删除“或”,它适用于其中一个。
此代码适用(对于一个陈述):
NSString *source = metaItem.stringValue;
NSString *baddata = @"a";
NSString *baddata2 = @"b";
if (![source isEqualToString:baddata])
{
if(![source isEqualToString:self.songInfo.text])
{
self.songInfo.text = [source stringByAppendingString:@" "];
}
}
同样,如果我将baddata
更改为baddata2
,它也可以正常运行。但是,如果我将其更改为此(检测其中任何一个)都没有检测到它们:
if (![source isEqualToString:baddata] || ![source isEqualToString:baddata2])
if
行不正确吗?我是否需要使用“nor”之类的东西?如果是,那么语法是什么?
答案 0 :(得分:2)
您可以使用:
if (![source isEqualToString:baddata] && ![source isEqualToString:baddata2])
没有NOR运算符,但你可以使用OR然后否定整个条件:
if (!([source isEqualToString:baddata] || [source isEqualToString:baddata2]))
答案 1 :(得分:2)
当__asm__ __volatile__("inc %0" :: "a"(num) : "%eax"); // illegal
__asm__ __volatile__("inc %0" :: "a"(num)); // Can I modify %eax?
和baddata
不同时,您的条件始终为真:任何字符串都不等于其中一个,因为没有字符串可以一次等于两个不相等的值。< / p>
您需要将条件更改为baddata2
:
&&
或使用De Morgan's Laws组合中间:
if (![source isEqualToString:baddata] && ![source isEqualToString:baddata2])
如果您有两个以上的“baddata”值,请考虑从它们构造哈希集,并使用set containment检查而不是逻辑AND / OR链。