Objective-C嵌套块的格式提示

时间:2010-07-28 04:45:56

标签: iphone objective-c objective-c-blocks

我并不是要在这里开始编码圣战的代码,但我想知道是否有人对如何在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 个答案:

答案 0 :(得分:4)

这就是为什么通用标准只有一个方法或函数的块参数,并且始终将块作为最后一个。在这种情况下,这可能是UIView提供的最自然的东西,而且你有它。

无论如何,你的方法是正确的。如果有的话,我可能会将内部块作为局部变量分解并将其作为参数传递。或者更多的块。

但是,能够选择整个文件并让Xcode重新格式化整个文件的方法可以节省大量时间;我一直在我的源上选择all-tab。最大限度地减少差异和不一致。

答案 1 :(得分: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;
            }
        ];
    }
];

这打破了块的标准格式(将}];保持在一起),但我认为它更具可读性。

答案 2 :(得分: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(!!!)次更接近左边。

另外,我认为它提高了可读性。