以下代码有何作用?
return obj ? : [NSNull null];
根据我对三元操作的理解,它将等同于:
if (!obj)
return [NSNull null];
但是返回了什么if (obj)
?它是否会落到return [NSNull null]
?
答案 0 :(得分:3)
如果obj
为True
,则会返回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的返回对象相同,则使用缩短版本。