Objective c 仅当变量为nil(三元运算符)时才分配空字符串
我正试图实现以下C代码的等价物: 其中,如果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 ?
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?:@谢谢你,埃里克。这就是我所希望的@Dave DeLong,也感谢您简化了它,我最终还是同意了您的实现。@DaveDeLong我在JavaScript方面的经验教会了我如何避免伪造的操作符。即使我知道这是什么,我的队友也可能不知道,我希望这一点能立即显现出来。已经说过了,+1是非常棒的提示。我一直缺少旧的a=b | | c
符号,这正是我一直在寻找的。我觉得if
版本在Obj-c中更简单易读。I更干净的是覆盖getter,而不是setter。
- (void)setSomeStringValue:(NSString *)newSomeStringValue
{
if (!newSomeStringValue) newSomeStringValue = @"";
_someStringValue = newSomeStringValue;
}