2010-06-17 3 views
17

मैं अन्य एनएसएसटींग उदाहरणों को जोड़कर निरंतर एनएसएसटींग को कम करने की कोशिश कर रहा हूं।Obj-C में तारों को संयोजित करके निरंतर एनएसएसटींग कैसे बनाएं?

यहाँ मैं अपने कार्यान्वयन फ़ाइल में क्या कर रहा है:

static NSString *const MY_CONST = @"TEST"; 
static NSString *const MY_CONCATENATE_CONST = [NSString stringWithFormat:@"STRING %@", MY_CONST]; 

यह निम्न संकलन त्रुटि की ओर जाता है: प्रारंभकर्ता तत्व स्थिर नहीं है

मुझे लगता है इस वजह से stringWithFormat वापस नहीं करता है निरंतर एनएसएसटींग, लेकिन चूंकि ओब्जे-सी में तारों को संयोजित करने का कोई और तरीका नहीं है, मुझे क्या करना चाहिए?

आपकी मदद के लिए धन्यवाद,

एरिक।

उत्तर

1

मुझे लगता है कि आप थोड़ा रुकें और लगता है कि स्ट्रिंग एक स्थिरांक के रूप में परिभाषित करने की आवश्यकता के बारे में अगर की जरूरत है: एक विकल्प के आप निम्न कर सकते हैं।

स्पष्ट रूप से स्ट्रिंग स्थिर नहीं है क्योंकि आप इसे एक नया मान असाइन करने का प्रयास कर रहे हैं - और यह संभव नहीं है क्योंकि आपने विशेष रूप से संकलक को निर्देश दिया है कि यह सुनिश्चित करने के लिए कि कॉन्स्ट कीवर्ड का उपयोग करके मूल्य नहीं बदला गया हो।

यदि स्ट्रिंग किसी वर्ग में किसी संपत्ति के रूप में रहती है तो आप इसे केवल पढ़ने-योग्य संपत्ति बना सकते हैं - यानी एक्सेसर विधि लेकिन कोई सेटटर विधि नहीं। कॉलर को मूल्य बदलने से रोकते समय आप अपनी स्ट्रिंग को आंतरिक रूप से कक्षा में बनाना चाहते हैं।

+10

मैं इस पर सहमत हूं, लेकिन अगर मुझे स्थिरांक को परिभाषित करने की आवश्यकता है (एक वास्तविक, जो कभी नहीं बदलेगा) अन्य स्थिरांक को जोड़कर? जावा में, यह छोटा है: निजी स्थिर अंतिम स्ट्रिंग CONST1 = "CONST1"; निजी स्थिर अंतिम स्ट्रिंग CONST2 = "CONST2"; निजी स्थैतिक अंतिम स्ट्रिंग CONCAT = CONST1 + "" + CONST2; यह मुझे 3 स्थिरांक रखने की अनुमति देता है, तीसरा एक दूसरे के साथ मिलकर बनता है। –

3

स्थिर कॉन्स ऑब्जेक्ट मान संकलन-समय पर निर्धारित किया जाता है ताकि आप वास्तव में उनके प्रारंभिकरण में कोई विधि कॉल नहीं जोड़ सकें।

static NSString *const MY_CONST = @"TEST"; 
static NSString *MY_CONCATENATE_CONST = nil; 

if (nil == MY_CONCATENATE_CONST) 
    MY_CONCATENATE_CONST = [NSString stringWithFormat:@"STRING %@", MY_CONST]; 
47

मैंने सोचा कि ऐसा करने का एक तरीका होना चाहिए, लेकिन सबसे अच्छा मैं #define निर्देश का उपयोग कर रहा था। उदाहरण के लिए,

// Define the base url as an NSString 
#define BASE_URL @"http://www.milhouse.co.uk/" 

// Now the derived strings glued by magic 
NSString *const kBaseURL = BASE_URL; 
NSString *const kStatusURL = BASE_URL @"status.html"; 
NSString *const kBalanceURL = BASE_URL @"balance.html"; 
+0

मुझे 'डुप्लिकेट प्रतीक _kActivityLogURL' त्रुटि मिल रही है –

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