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

Rezultatem jest strNil jest @ "null"Jak nil tworzy prosty pusty łańcuch w NSStringWithFormat?

Cóż, ma to być @ ""

I chcę eleganckie rozwiązanie. Wiem, że mogę po prostu utworzyć metodę kategorii emptyStringIfNil. Ale to by nie działało, ponieważ funkcja zwróci zero, zamiast @ "".

Co zrobić w tej sprawie?

Zasadniczo chcę stwierdzenia typu

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 

pokazać pusty każdym razem łańcuch jest zerowa

Na przykład, jeśli StreetAddress jest zerowa, chcę & ulica = & miasto = Tokio zamiast & ulica = (null) & miasto = Tokio

+0

Dlaczego by swój 'emptyStringIfNil' metoda powrót do kategorii' zerowe? Jeśli napiszesz taki kod: 'return string? ciąg: @ ""; 'to dostajesz to, czego chcesz. – rmaddy

+0

jeśli wywołuje '[anObject emptyStringIfNil]', a 'anObject' jest zerowe, metoda zwraca zero. – Sebastian

+1

@Sebastian Dobry punkt. To nie jest problem, jeśli 'emptyStringIfNil' jest zapisany jako funkcja zamiast metody instancji.I taka jest twoja odpowiedź. :) – rmaddy

Odpowiedz

6

Zamiast tego można użyć funkcji C:

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

Następnie [NSString stringWithFormat:@"%@", emptyStringIfNil(nil)] zwraca pusty ciąg.

Można też dodać metody klasy do NSString, ale ja osobiście jak podejściu C lepszego.

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

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

a następnie użyć [NSString emptyStringIfNil:yourString]

6

Nie wiem, czy istnieje prostszy sposób, ale można po prostu umieścić:

(strName ? strName : @"") 

lub prościej umieścić można użyć:

strName?:@"" 

który robi dokładnie to samo.

dla każdej struny, które wystarczy umieścić napis w swoim wyjściem, jeśli nie jest zerowa, w przeciwnym razie pusty.

+6

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

+1

To rozszerzenie GCC (a zatem Clang też je ma). – fumoboy007

0

Spróbuj

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

Output :: ==> 1

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

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

Wyjście :: ==>

Hope, dostaniesz to.

Dzięki.