我发现当我使用三元运算符时,Xcode的当前生产版本给了我一个错误:
//If address.title is not nil, leave it alone. Else, set it to @"".
address.title ?: [address setTitle:@""];
address.street ?: [address setStreet:@""];
当我使用Xcode 5.1的beta预览时,我没有得到这样的警告。是什么给了什么?
答案 0 :(得分:1)
"Conditionals with Omitted Operands"是GCC扩展(Clang也理解), 和
address.title ? : [address setTitle:@""];
相当于
address.title ? address.title : [address setTitle:@""];
唯一的区别是address.title
只评估一次。
现在第二个操作数有指针类型(NSString *
)和
第三个运算符具有void
类型。在这种情况下,条件的结果类型
表达式为void
,但ARC不允许将NSString *
隐式转换为void
。这将编译:
address.title ? (void)0: [address setTitle:@""];
但是,正如Merlevede所说,使用明确的if语句会更清楚。
如果Xcode 5.1的beta预览版中包含的编译器没有出错 那么它可能是编译器中的一个错误。当然它也可能是另一种语言 我不知道的延伸!
答案 1 :(得分:0)
您的语法错误
address.title ?: [address setTitle:@""];
应该是
address.title = (address.title)? address.title : @"";
// or
[address setTitle:((address.title)? address.title : @"")];
一般语法是
var = (condition) ? value_if_true : value_if_false; // general syntax
在你的情况下,最好做
if (!address.title)
address.title = @"";