2013-05-28 5 views
0

Hey là Stack Overflow! N'hésitez pas à passer le code si vous comprenez ma question sans cela; C'est plus ou moins juste de fournir du code pour les apprenants qui trébuchent sur ce sujet.2 Style Qs: Une raison de ne pas réutiliser les tags? Commutateur-boucliers d'instruction de commutateur?

1) Le style est-il médiocre pour réutiliser les étiquettes?

2) Pour les instructions de commutation, est-il recommandé de toujours utiliser des accolades dans chaque cas? Je le fais parce que je suis bien conscient des anciennes modifications de l'ARC qui conduisent à des erreurs de «commutation de cas dans une portée protégée» qui se produisent lorsque vous affectez une variable dans le bloc du cas. Je demande la même raison que # 1: je cherche à resserrer mon code sans développer de mauvaises habitudes de style.

Je suis juste fouettant cet exemple pour couvrir les deux, donc excuse les fautes de frappe/etc .:

Login.m

-(void)irrelevantSignInMethod 
{ 
    //Failed login 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry!" message:@"Log in failed" delegate: self cancelButtonTitle:@"OK" otherButtonTitles:@"Try Again", nil]; 
    [alert show]; 
    [alert setTag:1]; 
    ... 
    //Confirmed login 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sweet!" message:@"You've logged in!" delegate: self cancelButtonTitle:@"Sweet!" otherButtonTitles:nil, nil]; 
    [alert show]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:signInUsername.text forKey:@"username"]; 
    [defaults synchronize]; 
    [alert setTag:2]; 
} 

-(void)irrelevantSignUpThenInMethod 
{ 
    .... 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sweet!" message:@"You've registered and logged in!" delegate: self cancelButtonTitle:@"Sweet!" otherButtonTitles: nil]; 
    [alert show]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [alert setTag:3]; 
    //Just here to remind code-borrowers to store username somewhere 
    [defaults setObject:signInUsername.text forKey:@"username"]; 
    [defaults synchronize]; 
    //Here's where the question lies; is there any reason to not tweak to [alert setTag:2], shaving an if statement in the clickButtonAtIndex method? 
} 
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    switch (alertView.tag) 
    { 
     case 1: 
     { 
      ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Try Again"])) 
      { 
       //I always add an alert with "Try Again" in case the log in failed 
       UITextField *username = [alertView textFieldAtIndex:0]; 
       UITextField *password = [alertView textFieldAtIndex:1]; 
       signInUsername.text = username.text; 
       signInPassword.text = password.text; 
       [self attemptSignIn]; 
       break; 
      } 
     } 
    case 2: 
     { 
      [self loggedIn]; 
      break; 
     } 
     case 3: 
     { 
      //Here's where question #1 lies; is there any reason to not just assign both alerts the same tag (2) earlier and not need a 3rd case? 
      [self loggedIn]; 
      break; 
     } 
     case 4: 
     { 
      //Forgot password scenario. Too lazy to write how I do this out - but will answer if anyone PMs me - those borrowing this code should be prepared for this situation! 
      break; 
     } 
     default: 
     { 
      break; 
     } 
    } 
} 

Oui, je me rends compte le code était probablement pas nécessaire - mais qui sait, quelqu'un peut bénéficier de voir une structure de connexion de base. Si je n'étais pas clair plus tôt, je vais élaborer sur mes questions: puis-je aller de l'avant et attribuer le tag 2 deux fois et simplifier la méthode clickedButtonAtIndex? Je suis CS et j'ai couvert plusieurs semestres, donc je ne me souviens pas s'il y avait eu des éclaircissements. Je doute qu'une raison technique existe pour distinguer, et je suis tout à propos de code concis, mais je ne veux pas commencer à prendre l'habitude de briser une formalité "c'est la façon classique" aller de l'avant; D'autant que je suis noté sur le style et travaille avec d'autres sur des projets plus importants. Je sais que c'est une question minutieuse, mais je me surprends à me demander comment la plupart des gens s'y prennent et aimeraient avoir un dialogue avec votre expertise. En ce qui concerne la question des crochets: Je sais que cela peut être considéré comme une préférence (certains d'entre vous le code le plus concis possible tandis que d'autres le considèrent comme "cohérent comme possible") ... Je suis simplement curieux de savoir ce que pensent les vétérans devrait être le «statu quo». 3) Je sais que c'est mauvais (édit: terrible) étiquette, mais j'aimerais au moins 1 'vote' donc je suis admissible à commencer 'voter' parce que j'utilise la connaissance d'autres threads innombrables fois tous les jours, et en tant que rôdeur de plus d'une demi-décennie, je pense qu'il est temps de commencer à récompenser le utile avec des points Internet si précieux.

Merci pour votre temps Stack Overflow. Vous êtes vraiment le meilleur pour comprendre les concepts, découvrir des solutions et développer des développeurs.

Répondre

0

Si vous réutilisez les balises, je ne pense pas que vous pouvez identifier quelle vue d'alerte est dans laquelle méthode clickedButtonAtIndex déléguer.

Il peut également y avoir des problèmes lorsque vous utilisez la fonction viewWithTag dans une vue qui contient des sous-vues avec la même balise.

Et pour moi, il vaudra mieux définir quelques const pour les balises afin qu'il vous soit plus facile de parcourir vos codes, par exemple 3 défini comme IRRELEVANT_SIGN_UP_ALERT_TAG. Ensuite, dans votre code, vous pouvez simplement utiliser le IRRELEVANT_SIGN_UP_ALERT_TAG au lieu de 3, ce qui est plus facile à comprendre que de chercher dans le code à deviner ce qui est 3. Quand il est nécessaire de changer l'étiquette, vous n'avez pas besoin de changer les occurrences de 3 une par une aussi.

Les accolades sont une bonne idée pour l'instruction switch, par exemple vous pouvez créer une variable dans l'instruction switch avec eux: How do I create a variable inside a switch statement for a UITableView?

Questions connexes