2010-07-28 2 views
1

Я не хочу начинать форматирование кода святой войны здесь, но мне интересно, есть ли у кого-нибудь советы о том, как наилучшим образом форматировать вложенные блоки в Objective-C.Рекомендации по форматированию для вложенных блоков 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, и это не страшно. Но я боюсь, что через шесть месяцев я наткнусь на это, чтобы исправить ошибку, и хочу ударить себя в лицо.

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

ответ

2

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

[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

Yah - это тоже работает. И все же позволяет выбирать все в формате Xcode ... – bbum

+0

Да, мне это нравится, спасибо! – zpasternack

4

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

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

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

0

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

[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 (!!!) раз ближе к левому.

Кроме того, я думаю, что это улучшает читаемость.

Смежные вопросы