2013-01-05 9 views
14

Próbuję osiągnąć równowartość następującego kodu C#:Przypisywanie pusty łańcuch tylko wtedy, gdy zmienna jest zerowa (operator trójargumentowy)

someStringValue = someStringValue ?? string.Empty; 

Gdzie jeśli someStringValue jest null, wartość string.Empty (ciąg pusty : "") zostanie przypisany. Jak osiągnąć to w Objective-C? To moja jedyna opcja:

if(!someStringValue) 
    someStringValue = @""; 

Rozwiązanie dzięki @Dave DeLong:

someStringValue = someStringValue ?: @""; 
+0

czuję, że jeśli ' 'wersja jest znacznie bardziej prosta i czytelna w Obj-C. – Sulthan

Odpowiedz

25

Proste, używając operatora potrójny.

someStringValue = someStringValue ? someStringValue : @""; 

Lub jeśli chcesz makro, możesz to zrobić. Wykorzystanie

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

Próbka:

someStringValue = StringOrEmpty(someStringValue); 
+33

... a nawet po prostu 'someStringValue = someStringValue?: @" ";' –

+0

Dziękuję, Eric. Tego właśnie oczekiwałem. @Dave DeLong, dziękuję również za usprawnienie, ostatecznie poszedłem z twoją implementacją. – alan

+1

@DaveDeLong Moje doświadczenie było JavaScript nauczył mnie, aby uniknąć operatorów apokryficznych. Nawet jeśli wiem, co to jest, moi koledzy z drużyny prawdopodobnie tego nie zrobią i wolałbym, żeby było to od razu oczywiste. To powiedziawszy, +1 za niesamowitą wskazówkę. Brakowało mi starego "a = b || notacja c "i właśnie tego szukałem. – Eric

0

Jeśli someStringValue jest zmienną klasy, można dodać ten kod do pliku .m że posiada ciąg

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

Chodzi o to, że jestem bardziej czysty, niż on, a nie seter. – skywinder

Powiązane problemy