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にフォーマットさせましたが、それはひどいことではありません。しかし、私は6か月後には、いくつかのバグを修正するためにこれに遭遇するのではないかと心配しています。

ネストされたブロックをできるだけ読みやすくする方法についてのポインタはありますか?

4

3 に答える 3

4

そしてそれこそが、共通の標準がメソッドまたは関数に対して1つのブロックパラメーターのみを持ち、常に最後のブロックとして持つことである理由です。この場合、これはおそらくUIView提供するのに最も自然なことであり、そこにそれがあります。

いずれにせよ、あなたのアプローチは正しいものです。どちらかといえば、内部ブロックをローカル変数として分割し、引数として渡す可能性があります。または多分もっと多くのブロック。

ただし、ファイル全体を選択してXcodeにすべてを再フォーマットさせるというアプローチは、大幅な時間の節約になります。私はいつも自分のソースでselect-all-tabを行っています。差異と不整合を最小限に抑えます。

于 2010-07-28T04:58:45.543 に答える
2

ここでの本当の問題は、複数のブロック引数を取るメソッドであり、醜いまたは読みにくくなります。私はまだそれを使用する必要がある実際のコードを書いていませんが、1つの可能性は次のように}とを分離する];ことです:

[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 に答える