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

il risultato è strNil è @ "nullo"Come rendere nil produce una semplice stringa vuota in NSStringWithFormat?

Beh, voglio che sia @ ""

E voglio una soluzione elegante. So che posso solo creare il metodo di categoria emptyStringIfNil. Ma non funzionerebbe perché quella funzione restituirà nil, invece di @ "".

Cosa fai per questo?

Fondamentalmente voglio dichiarazioni come

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 

per mostrare ogni volta vuota la stringa è pari a zero

Per esempio, se streetAddress è pari a zero, voglio & strada = & città = Tokyo invece & strada = (null) & città = Tokyo

+0

Perché il metodo della categoria 'emptyStringIfNil' restituisce' nil'? Se lo scrivi come: 'return string? string: @ ""; 'allora ottieni quello che vuoi. – rmaddy

+0

se chiama '[anObject emptyStringIfNil]' e 'anObject' è nil, il metodo restituisce nil. – Sebastian

+1

@Sebastian Buon punto. Questo non è un problema se 'emptyStringIfNil' è scritto come una funzione invece di un metodo di istanza.E questo è ciò che la tua risposta mostra. :) – rmaddy

risposta

6

Si potrebbe utilizzare una funzione C invece:

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

Quindi [NSString stringWithFormat:@"%@", emptyStringIfNil(nil)] restituisce una stringa vuota.

È anche possibile aggiungere un metodo di classe a NSString, ma personalmente mi piace l'approccio C migliore.

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

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

e quindi utilizzare [NSString emptyStringIfNil:yourString]

6

Non so se c'è un modo più semplice, ma si può solo mettere:

(strName ? strName : @"") 

o, più semplicemente si può usare:

strName?:@"" 

che fa esattamente la stessa cosa.

per ciascuna delle stringhe, che è sufficiente posizionare la stringa nella vostra uscita se non è pari a zero, altrimenti una stringa vuota.

+6

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

+1

È un'estensione GCC (e quindi anche Clang). – fumoboy007

0

Prova questa

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

uscita :: ==> 1

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

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

uscita :: ==>

Speranza, lo otterrete.

Grazie.

Problemi correlati