2012-01-23 9 views
9

में स्विच कथन और आवृत्ति चर आवंटन मुझे स्विच स्टेटमेंट के अंदर नए स्थानीय चर बनाने में समस्या हो रही है। मैंने सोचा कि यह मेरे वर्ग के शीर्षकों में कुछ था, लेकिन एक नया NSObject आवंटित करने की कोशिश में त्रुटियां भी हो रही थीं। यहाँ मेरी वाक्य रचना है:उद्देश्य-सी

-(NSArray *)charactersFromChapter:(NSInteger)number { 
    NSObject *noError = [[NSObject alloc] init]; 
    //line above does not cause error 
    NSArray *characters; 
    switch (number) { 
     case 1: 
      NSObject *obj = [[NSObject alloc] init]; 
      //error happens in line above (Expected expression) 
      characters = [NSArray arrayWithObject:obj]; 
      break; 
     case 2: 

      break; 
     case 3: 

      break; 
    } 
    return characters; 
} 
+2

ध्यान दें, उन 'ivars' नहीं हैं। एक ivar एक आवृत्ति चर है, जो आप हेडर फ़ाइल में घोषित करेंगे। ये बस स्थानीय चर हैं। यह निश्चित रूप से अच्छा होगा अगर सी मानक समिति आपके द्वारा किए गए शैली की अनुमति देगी। –

+0

स्पष्टीकरण के लिए धन्यवाद, मैं प्रश्न – Justin

+1

@GrahamPerks में संशोधन करूंगा: Ivars को अब शीर्षलेख में होने की आवश्यकता नहीं है; वे '@ कार्यान्वयन' लाइन के तुरंत बाद हो सकते हैं। –

उत्तर

32

एक स्विच स्टेटमेंट में, आप पहले स्कोप सेट किए बिना वैरिएबल प्रारंभ नहीं कर सकते हैं, इसलिए इसे ठीक करने के लिए, इस तरह कुछ करें:

switch (some_expression) { 
    case case_1: 
    { // notice the brackets 
     id some_obj = [MyObj new]; 
     break; 
    } 
    default: 
     break; 
} 
+0

हाँ करने का अध्ययन कर रहा है, जिसने इसे ठीक किया है। शीघ्र उत्तर के लिए धन्यवाद। – Justin

+0

की अनुमति होने पर 10 मिनट के बाद उत्तर स्वीकार करेंगे। धन्यवाद। यह काम किया है :) –

5

आप या तो स्विच बयान की घोषणा करने के लिए "obj" बाहर, या ब्रेसेस का उपयोग इस प्रकार की जरूरत है:

switch (number) { 
    case 1: { 
     NSObject *obj = [[NSObject alloc] init]; 
     //error happens in line above (Expected expression) 
     characters = [NSArray arrayWithObject:obj]; 
     break; 
    } 

अधिक जानकारी के लिए यहाँ देखें: Why can't variables be declared in a switch statement?

+1

लिंक के लिए धन्यवाद, मुझे कुछ – Justin

1

स्विच-केस में आप केवल अभिव्यक्तियों का उपयोग कर सकते हैं।

आप कुछ इस तरह का उपयोग करके इसे ठीक कर सकते हैं:

case 1: 
{ 
     NSObject *obj = [[NSObject alloc] init]; 
     characters = [NSArray arrayWithObject:obj]; 
     break; 
}