Objective c 仅当变量为nil(三元运算符)时才分配空字符串

Objective c 仅当变量为nil(三元运算符)时才分配空字符串,objective-c,cocoa-touch,nsstring,variable-assignment,Objective C,Cocoa Touch,Nsstring,Variable Assignment,我正试图实现以下C代码的等价物: 其中,如果someStringValue为空,则将分配string.Empty(空字符串:“”)的值。我如何在目标C中实现这一点?这是我唯一的选择: if(!someStringValue) someStringValue = @""; 感谢@Dave DeLong的解决方案: someStringValue = someStringValue ?: @""; 简单,使用三元运算符 someStringValue = someStringValue ?

我正试图实现以下C代码的等价物:

其中,如果
someStringValue
为空,则将分配
string.Empty
(空字符串:
“”
)的值。我如何在目标C中实现这一点?这是我唯一的选择:

if(!someStringValue)
   someStringValue = @"";
感谢@Dave DeLong的解决方案

someStringValue = someStringValue ?: @"";

简单,使用三元运算符

someStringValue = someStringValue ? someStringValue : @"";
或者,如果需要宏,也可以这样做

#if !defined(StringOrEmpty)
    #define StringOrEmpty(A)  ({ __typeof__(A) __a = (A); __a ? __a : @""; })
#endif
示例用法:

someStringValue = StringOrEmpty(someStringValue);

如果someStringValue是类变量,则可以将此代码添加到拥有该字符串的.m文件中

- (void)setSomeStringValue:(NSString *)newSomeStringValue
{
   if (!newSomeStringValue) newSomeStringValue = @"";
   _someStringValue = newSomeStringValue;
}

... 甚至只是
someStringValue=someStringValue?:@a=b | | c
符号,这正是我一直在寻找的。我觉得
if
版本在Obj-c中更简单易读。I更干净的是覆盖getter,而不是setter。
- (void)setSomeStringValue:(NSString *)newSomeStringValue
{
   if (!newSomeStringValue) newSomeStringValue = @"";
   _someStringValue = newSomeStringValue;
}