缩短问号冒号吗?:Objective-C语法?

ohh*_*hho 21 objective-c

Xcode没有给出我的(想到的)拼写错误:

 NSString *theme = [[NSUserDefaults standardUserDefaults] objectForKey:@"theme"];
 NSLog(@"Theme: %@", theme ?: @"Default");
Run Code Online (Sandbox Code Playgroud)

事实证明:

 NSLog(@"Theme: %@", theme ?: @"Default");
Run Code Online (Sandbox Code Playgroud)

与以下相同:

 NSLog(@"Theme: %@", theme ? theme : @"Default");
Run Code Online (Sandbox Code Playgroud)

以上缩短语法适用于gcc吗?或者它是Objective-C的一部分?

tro*_*foe 17

它是C中条件表达式的GNU扩展:

这里:

C的GNU扩展允许省略第二个操作数,并且隐式地使用第一个操作数作为第二个操作数:

a = x ? : y;
Run Code Online (Sandbox Code Playgroud)

  • 我还在我的问题中引用了维基百科链接.由于Apple正在从gcc迁移到llvm,我很想知道它是否是Objective-C中的官方语法. (2认同)
  • @ohho是的我没有在你的问题中看到这个链接.他们正在向clang迈进,它提供了与GCC 4.2的兼容性,因此保留了GNU扩展. (2认同)