如何使nil在NSStringWithFormat中生成简单的空字符串?

use*_*951 6 objective-c xcode4.5

    NSString * strNil= [NSString stringWithFormat:@"%@",nil];
Run Code Online (Sandbox Code Playgroud)

结果是strNil是@"null"

好吧,我希望它是@""

我想要一个优雅的解决方案.我知道我可以创建emptyStringIfNil类别方法.但这不起作用,因为该函数将返回nil,而不是@"".

你为此做了什么?

基本上我想要这样的陈述

NSString * result =[NSString stringWithFormat:@"http://%@/business/api/addOrEditBusiness.php?flag=%@&title=%@&building=%@&latitude=%@&longitude=%@&website=%@&street=%@&city=%@&country=%@%@&originalid=%@&inbuildingaddress=%@&email=%@&zip=%@%@&userid=%@%@",urlServer,strFlag,biz.Title.RobustURLEncodedString,biz.buildingName.RobustURLEncodedString,@(coord.latitude),@(coord.longitude),biz.Website.RobustURLEncodedString,biz.Street.RobustURLEncodedString, biz.City.Name.RobustURLEncodedString, biz.City.Country.Name.RobustURLEncodedString,strPhonesParameter,biz.ID.RobustURLEncodedString,biz.InBui
Run Code Online (Sandbox Code Playgroud)

每次字符串为零时显示为空

例如,如果streetAddress为nil,我想要&street =&city = Tokyo而不是street =(null)&city = Tokyo

Jsd*_*ers 7

我不知道是否有更简单的方法,但你可以放:

(strName ? strName : @"")
Run Code Online (Sandbox Code Playgroud)

或者,更简单地说你可以使用:

strName?:@""
Run Code Online (Sandbox Code Playgroud)

它做了完全相同的事情.

对于每个字符串,如果字符串不是nil,则只将字符串放在输出中,否则为空字符串.

  • 或者`strName?:@""`. (6认同)

Seb*_*ian 6

您可以使用C函数:

static inline NSString* emptyStringIfNil(NSString *s) {
    return s ? s : @"";
}
Run Code Online (Sandbox Code Playgroud)

然后[NSString stringWithFormat:@"%@", emptyStringIfNil(nil)]返回一个空字符串.

你也可以添加一个类方法NSString,但我个人更喜欢C方法.

@interface NSString (EmptyIfNil)
+ (NSString*)emptyStringIfNil:(NSString*)s;
@end

@implementation NSString (EmptyIfNil)
+ (NSString*)emptyStringIfNil:(NSString*)s {
    return s ? s : @"";
}
@end
Run Code Online (Sandbox Code Playgroud)

然后使用 [NSString emptyStringIfNil:yourString]