Советы по форматированию для вложенных блоков Objective-C - PullRequest
1 голос
/ 28 июля 2010

Я не хочу начинать здесь кодирование форматирования священной войны, но мне интересно, есть ли у кого-нибудь совет, как лучше отформатировать вложенные блоки в Objective-C.

Вот код, который я написалсегодня:

 [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;
            }];
  }];

Я почти позволил Xcode отформатировать его, и это не страшно.Но я боюсь, что через шесть месяцев я наткнусь на это, чтобы исправить ошибку, и хочу ударить себя по лицу.

У кого-нибудь есть указания, как сделать вложенные блоки максимально читабельными?

Ответы [ 3 ]

4 голосов
/ 28 июля 2010

И именно поэтому общий стандарт должен иметь только один параметр блока для метода или функции и всегда иметь блок в качестве последнего. В этом случае это, вероятно, было наиболее естественным для UIView предложения, и вот оно у вас.

В любом случае, ваш подход правильный. Во всяком случае, я могу выделить внутренний блок как локальную переменную и передать его в качестве аргумента. Или, может быть, больше блоков.

Тем не менее, подход, заключающийся в возможности выбрать весь файл и переформатировать Xcode целиком, значительно экономит время; Я все время выбираю вкладку «все». Минимизирует различия и несоответствия.

2 голосов
/ 28 июля 2010

Настоящая проблема здесь заключается в методах, которые принимают несколько аргументов блока, что делает его уродливым или трудным для чтения. Я еще не написал ни одного реального кода, который должен использовать его, но одна возможность состоит в том, чтобы разделить } и ]; следующим образом:

[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;
            }
        ];
    }
];

Это нарушает стандартное форматирование блоков (которое сохраняет } и ]; вместе), но я думаю, что это немного более читабельно.

0 голосов
/ 13 декабря 2015

Как я бы порекомендовал

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

Поведение по умолчанию

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

(обратите внимание, что это точно такой же код)

Я знаю, Xcode заставляет открыватьсяфигурные скобки на той же строке, но учтите, что при открытии блоков фигурные скобки на новой строке позволяют писать код 4 (!!!) раз ближе к левому краю.

ТакжеЯ думаю, что это улучшает читаемость.

...