Objective-C“如果不相等或”声明不起作用

时间:2018-01-22 11:59:50

标签: objective-c

我对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”之类的东西?如果是,那么语法是什么?

2 个答案:

答案 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链。