2013-02-14 2 views
0

J'ai une méthode de classe censée prendre un objet et remplir quelques valeurs en place. C'est au stade de la démonstration fonctionnelle, donc la mise en œuvre sera meilleure plus tard. En ce moment je voudrais juste que cela fonctionne.Portée Problème: double matrice non accessible dans l'instruction if

Dans le code ci-dessous, l'entierID districtID est transmis avec succès aux instructions if. Le double tableau rgb ne le place pas dans la portée de l'instruction if. Les valeurs définies lors de l'initialisation font tout le chemin jusqu'au districtPoint.color sans être définies dans l'instruction if.

Le code ci-dessous ne sera pas compilé tel quel. Je voudrais savoir comment obtenir la variable rgb à être visible dans la portée de l'instruction if.

(note: J'ai essayé la solution naïve d'initialisation des variables à l'intérieur de l'instruction if Ceci efface l'erreur, mais ne laissez pas les nouvelles variables rgb de la si la portée.)

// This method populates properties 
+(void)setContantPropertiesForID:(DistrictPoint *)districtPoint 
{ 
    int districtID = [districtPoint.districtID intValue]; 
    double rgb[3] = {0,0,0}; 

    if (districtID == 1) { 
     districtPoint.title = @"District 1"; 
     rgb = {1.0,0.0,0.0};     // error is expected expression 
    } else if (districtID == 2) { 
     districtPoint.title = @"District 1"; 
     rgb = {0.0,1.0,0.0}; 
    } else if (districtID == 3) { 
     districtPoint.title = @"District 1"; 
     rgb = {0.0,0.0,1.0}; 
    } else { 
     districtPoint.title = nil; 
     rgb = {1.0,1.0,1.0};     // error condition 
    } 

    districtPoint.color = [UIColor colorWithRed:rgb[0] green:rgb[1] blue:rgb[2] alpha:0.5]; 
} 
+2

Ceci n'est pas une question Objective-C. Ce n'est pas une question à portée variable. Et cela n'a rien à voir avec iOS non plus. C'est une simple question de langage C. – matt

Répondre

2

Cela a Rien à voir avec l'instruction if. Vous pouvez utiliser la notation des accolades pour définir les éléments d'un tableau uniquement lors de l'initialisation (comme vous le faites en fait plus tôt dans le code).

+0

Merci, je me suis battu celui-là pendant 45 minutes. Question simple, réponse simple. Je vais accepter dès que StackOverflow me le permettra – Potter

+0

C'est une bonne idée de connaître C avant de jouer avec Objective-C. Je recommande toujours de garder une copie de Kernighan et Ritchie par vous à tout moment. Je fais certainement! – matt