2012-01-23 9 views
9

switch文の中に新しいローカル変数を作成する際に問題が発生しているようです。私はそれが私のクラスのヘッダーの中にあるものだと思っていましたが、新しいNSObjectを割り当てようとしてもエラーが発生しました。ここに私の構文は次のとおりです:Objective-Cのswitch文とインスタンス変数の割り当て

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

注意を、それらが「アイバーズ」ではありません。 ivarはインスタンス変数で、ヘッダファイルで宣言します。これらは単にローカル変数です。 Cの標準化委員会があなたが試みたスタイルを許可すればいいと思う。 –

+0

清算のおかげで、私は質問を修正します – Justin

+1

@GrahamPerks:Ivarsはもはやヘッダーに入れる必要はありません。 '@ implementation'行の直後に置くことができます。 –

答えて

32

switchステートメントでは、最初にスコープを設定せずに変数を初期化することはできませんので、修正するには次のようにしてください:

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

うん、それはそれを修正しました。迅速な返信をありがとう。許可されてから10分後に回答を受け入れるでしょう – Justin

+0

ありがとうございました:) –

5

あなたはswitch文の外に "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

switch-caseでは、式のみを使用できます。あなたはこのようなものを使用してこの問題を解決することができ

case 1: 
{ 
     NSObject *obj = [[NSObject alloc] init]; 
     characters = [NSArray arrayWithObject:obj]; 
     break; 
} 
関連する問題