2013-03-20 2 views
6
NSString * strNil= [NSString stringWithFormat:@"%@",nil]; 

結果が "ヌル"NSStringWithFormatでnilを単純な空の文字列にする方法はありますか?

は、まあ、私はそれになりたい@ ""

@ strNilがあると私はエレガントな解決策を求めています。私はちょうど空のStringIfNilカテゴリメソッドを作成することができます知っている。しかし、その関数は@ ""の代わりに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 

ようなステートメントは、文字列がstreetAddressがnilであれば例えば

nilを、私が欲しい&ストリート= &市=東京ではなく&ストリート=(ある空のたびを表示したいですnull)&都市=東京

+0

'emptyStringIfNil'カテゴリメソッドが' nil'を返すのはなぜですか?あなたが 'return string?文字列:@ ""; 'あなたが望むものを得る。 – rmaddy

+0

'[anObject emptyStringIfNil]'を呼び出し、 'anObject'がnilの場合、このメソッドはnilを返します。 – Sebastian

+1

@セバスチャン良い点。これは、 'emptyStringIfNil'がインスタンスメソッドではなく関数として記述されている場合には問題になりません。それがあなたの答えです。 :) – rmaddy

答えて

6

代わりにC関数を使用できます。

static inline NSString* emptyStringIfNil(NSString *s) { 
    return s ? s : @""; 
} 

[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 

そして使用[NSString emptyStringIfNil:yourString]私はもっと簡単な方法があれば知らない、しかし、あなたはちょうど置くことができる

6

(strName ? strName : @"") 

のか、より簡単に使用することができます置く:

strName?:@"" 

これはまったく同じことです。

それぞれの文字列は、文字列がnilでない場合は出力に、そうでない場合は空の文字列に配置されます。

+6

または 'strName?:@" "' – fumoboy007

+1

これはGCC拡張です(したがってClangもあります)。 – fumoboy007

0

は出力:: ==>

希望、あなたはそれを得るでしょう。この

NSString *strNil1 = [[NSString alloc] init]; 
strNil1 = @"1"; 
strNil1 = strNil1 ? strNil1 : @""; 
NSLog(@" ==> %@", strNil1); 

出力:: ==> 1

NSString *strNil2 = [[NSString alloc] init]; 

strNil2 = strNil2 ? strNil2 : @""; 
NSLog(@" ==> %@", strNil2); 

を試してみてください。

ありがとうございました。

関連する問題