1

我并不是要在这里开始一场代码格式化圣战,但我想知道是否有人对如何最好地格式化 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 格式化它,它并不可怕。但我有点害怕六个月后我会偶然发现这个来修复一些错误,并想打自己的脸。

有人对如何使嵌套块尽可能可读有任何指示吗?

4

3 回答 3

4

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

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

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

于 2010-07-28T04:58:45.543 回答
2

这里真正的问题是采用多个块参数的方法,这使得它要么丑陋要么难以阅读。我还没有编写任何需要使用它的真实代码,但一种可能性是将 and 分开}];如下所示:

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

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

于 2010-07-28T05:01:15.743 回答
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(!!!)次。

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

于 2015-12-12T22:51:59.503 回答