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

Das Ergebnis ist strNil ist @ "null"Wie macht man Nil produziert einfache leere Zeichenfolge in NSStringWithFormat?

Nun, ich will es sein @ ""

Und ich möchte eine elegante Lösung. Ich weiß, ich kann einfach die leere Methode der Methode "emptyStringIfNil" erstellen. Aber das würde nicht funktionieren, da diese Funktion anstelle von @ "" null zurückgibt.

Was tun Sie dafür?

Grundsätzlich möchte ich Aussagen wie

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 

leer jedes Mal zeigen die Zeichenfolge null

Zum Beispiel, wenn street null ist, ich will & street = & city = Tokyo statt & street = (null) & city = Tokyo

+0

Warum würde Ihre Methode 'emptyStringIfNil'' 'nil' zurückgeben? Wenn Sie es schreiben wie: 'return string? string: @ ""; 'dann bekommst du was du willst. – rmaddy

+0

Wenn er '[anObject emptyStringIfNil]' 'aufruft und 'anObject' gleich null ist, gibt die Methode nil zurück. – Sebastian

+1

@Sebastian Guter Punkt. Das ist kein Problem, wenn 'emptyStringIfNil' als eine Funktion anstelle einer Instanzmethode geschrieben wird.Und das zeigt deine Antwort. :) – rmaddy

Antwort

6

Sie könnten stattdessen eine C-Funktion verwenden:

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

Dann gibt [NSString stringWithFormat:@"%@", emptyStringIfNil(nil)] eine leere Zeichenfolge zurück.

Sie könnten auch eine Klassenmethode zu NSString hinzufügen, aber ich persönlich mag die C-Ansatz besser.

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

@implementation NSString (EmptyIfNil) 
+ (NSString*)emptyStringIfNil:(NSString*)s { 
    return s ? s : @""; 
} 
@end 

Und dann verwenden [NSString emptyStringIfNil:yourString]

6

Ich weiß nicht, ob es ein einfacher Weg ist, aber man konnte nur sagen:

(strName ? strName : @"") 

oder, einfacher gesagt Sie verwenden können:

strName?:@"" 

was genau dasselbe tut.

für jede der Zeichenfolgen, die nur die Zeichenfolge in Ihrer Ausgabe platzieren, wenn es nicht Null ist, sonst eine leere Zeichenfolge.

+6

Oder 'strName?: @" "'. – fumoboy007

+1

Es ist eine GCC-Erweiterung (und Clang hat es auch). – fumoboy007

0

Versuchen Sie, diese

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

Ausgabe :: ==> 1

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

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

Ausgabe :: ==>

Hope, Sie werden es bekommen.

Danke.