2013-01-05 47 views
14

मैं निम्नलिखित सी # कोड के बराबर प्राप्त करने के लिए कोशिश कर रहा हूँ है:असाइन रिक्त स्ट्रिंग केवल तभी चर शून्य (त्रिगुट ऑपरेटर)

someStringValue = someStringValue ?? string.Empty; 

कहाँ अगर someStringValue रिक्त है, string.Empty (रिक्त स्ट्रिंग के एक मूल्य : "") असाइन किया जाएगा। मैं उद्देश्य-सी में इसे कैसे प्राप्त करूं?

if(!someStringValue) 
    someStringValue = @""; 

@Dave डीलॉन्ग के समाधान के लिए धन्यवाद:

someStringValue = someStringValue ?: @""; 
+0

मुझे लगता है कि 'अगर 'ओबज-सी में संस्करण अधिक सरल और पठनीय है। – Sulthan

उत्तर

25

सरल, त्रिगुट ऑपरेटर का उपयोग मेरी एकमात्र विकल्प है।

someStringValue = someStringValue ? someStringValue : @""; 

या यदि आप एक मैक्रो चाहते हैं, तो आप भी ऐसा कर सकते हैं।

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

नमूना उपयोग:

someStringValue = StringOrEmpty(someStringValue); 
+33

... या यहां तक ​​कि बस 'someStringValue = someStringValue?: @ ""; ' –

+0

धन्यवाद, एरिक। यही वह है जिसे मैं उम्मीद कर रहा था। @ डेव डीलॉन्ग, इसे सुव्यवस्थित करने के लिए भी धन्यवाद, मैं अंततः आपके कार्यान्वयन के साथ चला गया। – alan

+1

@ डेवडेलोंग मेरा अनुभव जावास्क्रिप्ट ने मुझे अपोक्राफल ऑपरेटरों से बचने के लिए सिखाया है। यहां तक ​​कि अगर मुझे पता है कि यह क्या है, तो मेरे साथियों की शायद नहीं होगी और मैं इसे तुरंत स्पष्ट कर दूंगा। कहा जा रहा है, भयानक टिप के लिए +1। मैं पुराना 'ए = बी || गायब था सी' नोटेशन और यही वही है जो मैं ढूंढ रहा हूं। – Eric

0

तो someStringValue एक वर्ग चर रहा है, तो आप अपने मीटर फ़ाइल कि स्ट्रिंग मालिक को यह कोड जोड़ सकते हैं

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

मैं चीज अधिक साफ ओवरराइड गेटटर है, सेटर नहीं। – skywinder

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^