Objective c 目标-C“可能较短”;如果;符号

Objective c 目标-C“可能较短”;如果;符号,objective-c,if-statement,Objective C,If Statement,有没有办法缩短这个if语句 if(objectA != objectD && objectB != objectD && objectC != objectD) 类似于以下伪代码: if(objectA && objectB && objectC != objectD) 编辑: 如果我只想检查它是否为NULL呢?比如: if(objectA != NULL && objectB != NULL &&

有没有办法缩短这个if语句

if(objectA != objectD && objectB != objectD && objectC != objectD)
类似于以下伪代码:

if(objectA && objectB && objectC != objectD)
编辑:

如果我只想检查它是否为NULL呢?比如:

if(objectA != NULL && objectB != NULL && objectC != NULL)
编辑2(对不起):

如果我只想检查它是否为非空呢

if(objectA != [NSNull null] && objectB != [NSNull null] && objectC != [NSNull null])

NULL
nil
0
是:

您可以通过如下头文件来验证
NULL
0
的一些变体

为了确保它们都存在,只需测试
NULL
,或者更准确地说,因为它们是对象,
nil

if (objectA && objectB && objectC) ...
但是,依我看,你不应该这样做,除非你需要根据他们的
nil
这一事实采取行动。由于
nil
接受消息,因此构建代码通常会更好,以便
nil
可以成为有效的接收者。也就是说,如果向这些
nil
对象发送消息时没有发生任何事情,则不会导致任何问题。换句话说,考虑不要使用<代码> nIL/COD>作为错误的情况,而是从失败的API返回<代码> *nSerror < /代码>。 关于NSNull问题,我专门写了一个例子。它将允许您编写:

if (isNSNull(objectA, objectB, objectC, objectD, nil)) ...
要测试是否所有对象==
[NSNull null]
。您还可以使用类似的技术来测试它们是否都是相同的对象:

if (isEqualTo(objectD, objectA, objectB, objectC, nil)) ...
如果A、B和C都是D,则将返回
YES

这个例子的关键是:

// This is just a simple object equality comparator.
static NSComparator compareeq = ^(id obj1, id obj2) {
  if (obj1 == obj2) {
    return (NSComparisonResult)NSOrderedSame;
  }
  return (NSComparisonResult)NSOrderedDescending;
};

// This'll execute the above comparator to compare eq to each object in args
NSComparisonResult comparatorV(NSComparator compare, NSObject *eq, va_list args) {
  NSComparisonResult result;
  NSObject *value;
  do {
    if (value = va_arg(args, NSObject*)) {
      result = compare(eq,value);
    }
  } while (value && result == NSOrderedSame);
  return (!value?NSOrderedDescending:NSOrderedSame);
}

// This just test if each object passed is == [NSNull null].
BOOL isNSNull(NSObject *o, ...) {
  NSNull *n = [NSNull null];
  if (NSOrderedSame != compareeq(n,o)) return NO;
  va_list args;
  va_start(args, o);
  BOOL result = (NSOrderedSame != comparatorV(compareeq,n,args));
  va_end(args);
  return result;
}

如果要检查三个对象(a、b和c)是否等于对象D,可以执行以下操作:

if (objectA == objectB == objectC == objectD) {
    // .. your code here ..
}

不是真的。据我所知,没有一种公共语言包含这样的结构(尽管有很多时候,类似的东西会很方便)。我怀疑其中的一个问题是出现了一个不含糊的符号,这个符号足够普遍,值得一试。他不是在检查null值,而是在检查
NSNull
singleton对象,它永远不会是
0
@AbhiBeckert,他问:“如果我只想检查它是否不为null呢?”?不管他的编码示例如何,由于他也会问“类似的问题?”假设他不知道正确的技巧,所以我回答了他的问题,这是我将如何做,以及我认为通常最好的方法。是的,这是另一个例子,说明了为什么尽可能多地给出问题的细节很重要(我没有这样做)因为我确实想检查NSNULL对象,因为NSJSONSerialization对象为我创建了这些对象。@Tieme我已经编辑了我的答案,以包括一种技术来简化如此繁琐的代码。@nicerobot哈哈,很好,你的辛勤工作得到了额外的学分。也许在答案中加入一小段脚本是个好主意。
if (objectA == objectB == objectC == objectD) {
    // .. your code here ..
}