web-dev-qa-db-fra.com

Puis-je déclarer des variables dans une déclaration de commutation de l'objectif-C?

Je pense que je vais être aveugle, car je ne peux pas comprendre où l'erreur de syntaxe est dans ce code:

if( cell == nil ) {
    titledCell = [ [ [ TitledCell alloc ] initWithFrame:CGRectZero
        reuseIdentifier:CellIdentifier ] autorelease
    ];

    switch( cellNumber ) {
        case 1:
            NSString *viewDataKey = @"Name";
etc...

Lorsque j'essaie de le compiler, j'obtiens un Erreur: erreur de syntaxe avant '*' 'Jeton sur la dernière ligne.

Désolé pour une telle question fondamentale, mais que manque-t-il?

57
JoBu1324

Je n'ai pas de compilateur d'objectif-C approprié à portée de main, mais tant que les constructions C sont identiques:

switch { … } vous donne ne Portée de niveau de bloc, pas une pour chaque case. Déclarant une variable partout où le début de la portée est illégale et à l'intérieur d'un switch est en particulier dangereux car son initialisation peut être sautée plus de.

Est-ce que l'une des suivantes résout le problème?

NSString *viewDataKey;
switch (cellNumber) {
    case 1:
        viewDataKey = @"Name";
    …
}

switch (cellNumber) {
    case 1: {
        NSString *viewDataKey = @"Name";
        …
    }
    …
}
69
ephemient

En C, vous ne pouvez déclarer que des variables au début d'un bloc avant toute déclaration sans déclaration.

{
   /* you can declare variables here */

   /* block statements */

   /* You can't declare variables here */
}

En C++, vous pouvez déclarer des variables dans lesquelles vous en avez besoin.

4
Aragorn

Pourrait-il ne pas être valide pour déclarer une variable dans un bloc de commutation?

1
Phil Miller

Comment résoudre l'avertissement:

1. Insérez un ; Dans la première ligne de votre bloc de cas

2. Codes de vente à l'intérieur des accolades

0
lin zheng