2013-01-05 7 views
14

Sto cercando di ottenere l'equivalente del seguente codice C#:Assegnare stringa vuota solo se la variabile è pari a zero (operatore ternario)

someStringValue = someStringValue ?? string.Empty; 

Dove se someStringValue è null, un valore di string.Empty (la stringa vuota : "") verrà assegnato. Come raggiungo questo obiettivo in Objective-C? È la mia unica opzione:

if(!someStringValue) 
    someStringValue = @""; 

soluzione grazie a @ Dave DeLong:

someStringValue = someStringValue ?: @""; 
+0

sento che il 'se 'La versione è molto più semplice e leggibile in Obj-C. – Sulthan

risposta

25

semplice, utilizzando operatore ternario.

someStringValue = someStringValue ? someStringValue : @""; 

Oppure se vuoi una macro, puoi farlo anche tu. utilizzo

#if !defined(StringOrEmpty) 
    #define StringOrEmpty(A) ({ __typeof__(A) __a = (A); __a ? __a : @""; }) 
#endif 

Esempio:

someStringValue = StringOrEmpty(someStringValue); 
+33

... o anche solo 'someStringValue = someStringValue?: @" ";' –

+0

Grazie, Eric. Questo è quello che speravo. @Dave DeLong, grazie anche per lo snellimento, alla fine sono andato con la tua implementazione. – alan

+1

@DaveDeLong La mia esperienza è stata JavaScript mi ​​ha insegnato a evitare gli operatori apocrifi. Anche se so cosa sia, probabilmente i miei compagni non lo faranno e preferirei che fosse immediatamente ovvio. Detto questo, +1 per il fantastico consiglio. Mi era mancato il vecchio 'a = b || c' notazione ed è proprio quello che stavo cercando. – Eric

0

Se someStringValue è una variabile di classe, è possibile aggiungere questo codice al file .m che possiede la stringa

- (void)setSomeStringValue:(NSString *)newSomeStringValue 
{ 
    if (!newSomeStringValue) newSomeStringValue = @""; 
    _someStringValue = newSomeStringValue; 
} 
+0

I thing is more override getter, not setter. – skywinder