You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C中if多条件不等判断语句失效问题咨询

问题分析与解决方案

嘿,你这是把逻辑运算符的用法搞反啦!咱们一步步理清楚:

为什么你的||写法不对?

你想要实现的是source既不等于"a",也不等于"b",但用||(逻辑或)的时候,只要其中一个条件为真,整个表达式就会判定为真。举几个实际场景的例子:

  • 如果source是"a":![source isEqualToString:@"a"]是假,但![source isEqualToString:@"b"]是真,整个||表达式结果为真,代码会执行——这完全违背你的初衷;
  • 如果source是"b":同理,另一个条件为真,表达式还是为真;
  • 只有当source同时等于"a"和"b"的时候(这根本不可能),表达式才会为假——这完全和你要的逻辑背道而驰!

而你之前嵌套的两个if,本质上是**逻辑与(&&)**的关系:只有两个条件都满足(既不等于a,也不等于b),才会执行内部代码,所以单独测试每个条件都能正常工作。

正确的写法有两种:

写法一:用&&直接表达“既不…也不…”

把||换成&&就行,和你嵌套if的逻辑完全一致:

NSString *source = metaItem.stringValue;
NSString *baddata = @"a";
NSString *baddata2 = @"b";

if (![source isEqualToString:baddata] && ![source isEqualToString:baddata2]) {
    if(![source isEqualToString:self.songInfo.text]) {
        self.songInfo.text = [source stringByAppendingString:@" "];
    }
}

写法二:用De Morgan定律简化(更贴合自然逻辑)

根据逻辑运算的De Morgan定律,“既不A也不B”等价于“不是(A或B)”,所以可以写成更直观的形式:

if (!([source isEqualToString:baddata] || [source isEqualToString:baddata2])) {
    if(![source isEqualToString:self.songInfo.text]) {
        self.songInfo.text = [source stringByAppendingString:@" "];
    }
}

这种写法读起来就是“如果source不是等于a或者等于b”,和你想要的自然语义完全匹配,更容易理解和维护。

总结

Objective-C里没有专门的nor关键字,你只需要用对逻辑运算符:

  • 要表达“既不…也不…”:用&&连接两个否定条件,或者用!包裹||连接的原条件;
  • ||是“或”逻辑,只要有一个条件满足就为真,完全不适合你的场景。

内容的提问来源于stack exchange,提问作者omega1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:56:37