没有任何内容的三元运营商如果'条件

时间:2014-10-08 13:30:19

标签: ios objective-c iphone ternary-operator

以下代码有何作用?

return obj ? : [NSNull null];

根据我对三元操作的理解,它将等同于:

if (!obj)
    return [NSNull null];

但是返回了什么if (obj)?它是否会落到return [NSNull null]

2 个答案:

答案 0 :(得分:3)

如果objTrue,则会返回obj

return obj ? : [NSNull null];

相当于:

id x = obj;
if (x) {
    return x;
else {
    return [NSNull null];
}

只要obj没有副作用,它在逻辑上等同于:

return obj ? obj : [NSNull null]

答案 1 :(得分:3)

代码......

return foo ? : bar;

将返回与...相同的值

return foo ? foo : bar;

不同之处在于第一种方法只检查foo值一次。

最好在几种情况下使用第一种。

例如,创建一个对象......

// this would create two objects, one to check and the other to return
return [MyObject objectWithSomeParam:param] ? [MyObject objectWithSomeParam:param] : bar;

或运行昂贵的功能......

// the expensive function here is run twice
return [self someExpensiveFunction] ? [self someExpensiveFunction] : bar;

这两个都可以从使用

中受益
return foo ?: bar;

基本上,如果验证对象与true的返回对象相同,则使用缩短版本。