2010-07-28 2 views
1

Je ne veux pas commencer un formatage du code guerre sainte, mais je me demande si quelqu'un a des conseils sur la façon de meilleur format blocs imbriqués dans Objective-C.Mise en forme des conseils pour les blocs imbriqués Objective-C

Voici un code que j'ai écrit aujourd'hui:

[UIView animateWithDuration:1.0 
     animations:^{ 
     self.alpha = 0.5; 
     } 
     completion:^(BOOL finished){ 
     [UIView animateWithDuration:1.0 
      animations:^{ 
      winView.alpha = 1.0;    
      } 
      completion:^(BOOL finished){ 
      winView.alpha = 0.0; 
      }]; 
    }]; 

je à peu près le format Xcode laisse, et il est pas terrible. Mais j'ai un peu peur dans six mois que je trébuche dessus pour corriger un bug et que je veuille me frapper au visage.

Quelqu'un at-il des pointeurs sur la façon de rendre les blocs imbriqués aussi lisibles que possible?

Répondre

2

Le vrai problème ici est celui des méthodes qui prennent plusieurs arguments de bloc, ce qui le rend soit laid soit difficile à lire. Je ne l'ai pas écrit de code réel qui doit l'utiliser encore, mais une possibilité est de séparer les } et ]; comme ceci:

[UIView animateWithDuration:1.0 
    animations:^{ 
     self.alpha = 0.5; 
    } 
    completion:^(BOOL finished){ 
     [UIView animateWithDuration:1.0 
      animations:^{ 
       winView.alpha = 1.0;    
      } 
      completion:^(BOOL finished){ 
       winView.alpha = 0.0; 
      } 
     ]; 
    } 
]; 

Cela brise le formatage standard de blocs (qui maintient ensemble } et ];) , mais je pense que c'est un peu plus lisible.

+0

Yah - ça marche aussi. Et permet toujours de sélectionner-tout-format dans Xcode ... – bbum

+0

Oui, j'aime ça, merci! – zpasternack

4

Et c'est exactement la raison pour laquelle la norme commune est d'avoir un seul paramètre de bloc à une méthode ou une fonction et ont toujours le bloc comme le dernier. Dans ce cas, c'était probablement la chose la plus naturelle pour offrir et là vous l'avez.

Dans tous les cas, votre approche est la bonne. Si quelque chose, je pourrais casser le bloc interne en tant que variable locale et le passer en tant qu'argument. Ou peut-être plus de blocs.

Cependant, l'approche de pouvoir sélectionner un fichier entier et Xcode reformater l'ensemble est un gain de temps considérable; Je sélectionne tout-onglet sur ma source tout le temps. Minimise les différences et les incohérences.

0

Comment je recommande

[UIView animateWithDuration:0 
       animations:^ 
{ 
    [UIView animateWithDuration:1 
         animations:^ 
     { 
      <#code#> 
     }]; 
} 
       completion:^(BOOL finished) 
{ 
    [UIView animateWithDuration:1 
         animations:^ 
     { 
      <#code#> 
     } 
         completion:^(BOOL finished) 
     { 
      <#code#> 
     }]; 
}]; 

Le comportement par défaut

[UIView animateWithDuration:0 
       animations:^{ 
        [UIView animateWithDuration:1 
             animations:^{ 
              <#code#> 
             }]; 
       } completion:^(BOOL finished) { 
        [UIView animateWithDuration:1 
             animations:^{ 
              <#code#> 
             } completion:^(BOOL finished) { 
              <#code#> 
             }]; 
       }]; 

(notez que c'est exactement le même code)

Je sais forces Xcode pour ouvrir des accolades à la même ligne , mais s'il vous plaît noter que dans le cas de blocs ouverture accolades à la nouvelle ligne vous permet d'écrire le code 4 (!!!) fois plus près de la gauche.

En outre, je pense que cela améliore la lisibilité.