使用或 || if 语句中的运算符以评估变量(不等于两(2)个字符串)

Posted

技术标签:

【中文标题】使用或 || if 语句中的运算符以评估变量(不等于两(2)个字符串)【英文标题】:Using OR || operator within if statement to assess variable (to be not equal to two(2) strings) 【发布时间】:2014-01-21 10:37:27 【问题描述】:

我使用NSUserDefault(用户默认值)来确定“列表升序排序”——使用NSFetchedResultsController从我的核心数据堆栈中获得的列表——是否升序排序。

例如:

NSSortDescriptor *sortDescriptorPrimary = [NSSortDescriptor sortDescriptorWithKey:self.sortAttributePrimary ascending:listsSortAscending selector:@selector(compare:)];

无论用户设置如何,都有两个实体的此值始终为真,即BOOL listsSortAscending = YES;,具体而言,按字母顺序排序的列表,例如联系人列表。

这句话后面的代码试图解释我想要实现的目标......

BOOL listsSortAscending = YES;
if ((![self.entity isEqualToString:@"Contact"]) || (![self.entity isEqualToString:@"TypeChild"]))
    listsSortAscending = [self.userDefaults boolForKey:kListsSortAscending];

除了这两个实体的列表将始终按ascending:YES 排序外,其他实体将根据用户默认的listsSortAscending 进行排序。

但是,这段代码不起作用,我似乎无法正确计算出语法。

我已经阅读了很多 Stack Overflow 和其他页面,包括 Objective-C IF statement with OR condition,但是我似乎无法解决这个烦人的语法!!!

下面包含的代码确实有效,但是我的强迫症特征今天表现得很强烈,我想学习使用 OR 运算符|| 的正确语法。

BOOL listsSortAscending = YES;
if (![self.entity isEqual:@"Contact"]) 
    if (![self.entity isEqual:@"TypeChild"]) 
        listsSortAscending = [self.userDefaults boolForKey:kListsSortAscending];
    

有什么建议吗?

【问题讨论】:

您的第一个代码检查“entity != Contact OR entity != TypeChild”,第二个代码检查“entity != Contact AND entity != TypeChild”... 感谢@MartinR,完全错过了。 【参考方案1】:

我想你想要:

if ((![self.entity isEqualToString:@"Contact"] && ![self.entity isEqualToString:@"TypeChild"])) 

这实际上不是语法的东西,而是否定的东西。有时更容易指定肯定情况而不是否定情况。但是您的第二段代码嵌套 ifs 实际上是 && 而不是 ||

【讨论】:

谢谢@Wain,完全错过了。您建议的代码示例完美运行。现在明白了,不是语法的东西。否定完全让我感到困惑。

以上是关于使用或 || if 语句中的运算符以评估变量(不等于两(2)个字符串)的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中如何评估 if 语句?

如果评估的变量为 False,为啥我的 django 模板中的这个 IF 语句会执行?

为啥在 bash if 语句中未设置的变量被评估为 0

在变量赋值powershell中执行if语句

C#中的分支结构与循环

C# - 具有 2 个变量的逻辑运算符 - 组合运算符以避免 if 语句