2012-01-23 18 views
9

Tôi dường như đang gặp sự cố khi tạo biến cục bộ mới bên trong câu lệnh chuyển đổi. Tôi nghĩ rằng đó là một cái gì đó trong tiêu đề lớp học của tôi, nhưng thậm chí còn nhận được lỗi cố gắng để phân bổ một NSObject mới. Dưới đây là cú pháp của tôi:Báo cáo chuyển đổi và phân bổ biến mẫu trong Mục tiêu-C

-(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

Lưu ý, những người không phải 'ivars'. Một ivar là một biến cá thể, một cái gì đó bạn muốn khai báo trong tệp tiêu đề. Đây chỉ là các biến cục bộ. Nó chắc chắn sẽ là tốt đẹp nếu ủy ban tiêu chuẩn C sẽ cho phép phong cách bạn đã cố gắng. –

+0

cảm ơn bạn đã làm rõ, tôi sẽ sửa đổi câu hỏi – Justin

+1

@GrahamPerks: Ivars không cần phải ở trong tiêu đề nữa; chúng có thể ngay lập tức sau dòng '@ implementation'. –

Trả lời

32

Trong tuyên bố chuyển đổi, bạn không thể khởi tạo biến mà không đặt phạm vi trước, do đó, để khắc phục nó, hãy thực hiện như sau:

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

yep, đã sửa nó. Cảm ơn vì đã trả lời nhanh chóng. sẽ chấp nhận câu trả lời sau 10 phút khi được phép – Justin

+0

Cảm ơn bạn. –

5

Bạn cần phải hoặc tuyên bố "obj" bên ngoài của câu lệnh switch, hoặc sử dụng niềng răng như sau:

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

Xem ở đây để biết thêm thông tin: Why can't variables be declared in a switch statement?

+1

nhờ liên kết, tôi đã có một số nghiên cứu để làm – Justin

1

Trong trường hợp chuyển đổi, bạn chỉ có thể sử dụng các biểu thức.

Bạn có thể khắc phục điều này bằng cách sử dụng một cái gì đó như thế này:

case 1: 
{ 
     NSObject *obj = [[NSObject alloc] init]; 
     characters = [NSArray arrayWithObject:obj]; 
     break; 
} 
Các vấn đề liên quan