2012-01-23 15 views
9

Bir anahtar deyiminde yeni yerel değişkenler oluşturmakta sorun yaşıyorum gibi görünüyor. Sınıf başlıklarında bir şey olduğunu düşündüm, ancak yeni bir NSObject ayırmaya çalışırken bile hatalar alıyordum. İşte benim dizimi var:Anahtar deyimleri ve örnek değişken ayırma, Objective-C

aşağıdaki gibi beyan "obj" dışında switch ifadesinin veya parantez yapmalı ya
-(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

Not, bu 'Ivars' değildir. Bir ivar başlık dosyasında bildireceğiniz bir örnek değişkenidir. Bunlar basit yerel değişkenlerdir. C standartları komitesinin denediğiniz stile izin vermesi çok hoş olurdu. –

+0

açıklama için teşekkürler, ben – Justin

+1

@GrahamPerks soruları değiştireceğim: Ivars artık başlıkta olmak zorunda değilsiniz; '@' uygulama satırından hemen sonra olabilirler. –

cevap

32

Bir anahtar deyiminde, ilk önce bir kapsam belirlemeden değişkenleri başlatamazsınız, bu nedenle bunu düzeltmek için aşağıdaki gibi bir şey yapın:

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

yep. Çabuk cevapladığınız için teşekkürler. – Justin

+0

izin verildiğinde 10 dakika sonra cevap kabul edecek. –

5

:

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

fazla bilgi için buraya bakınız: Why can't variables be declared in a switch statement?

+1

link için teşekkürler, ben bunu düzeltmek için bazı çalışma var – Justin

1

Anahtar durumunda yalnızca ifadeleri kullanabilirsiniz.

Böyle bir şey kullanarak bu düzeltebilirsiniz:

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