Objective c 目标-C“可能较短”;如果;符号
有没有办法缩短这个if语句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(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 ..
}