2012-04-04 9 views
2

この方法を簡略化する方法はありますか?恐らく両方のステートメントをfor-loopで一緒に& &への道にしますか?このIBOutletConnection文を単純化する方法はありますか?

// Enable valid decimal buttons 
- (IBAction)enableDecimalValues 
{ 
    for(UIButton *decimalButton in nonOctalValueCollection) 
    { 
     decimalButton.enabled = YES; 
     [decimalButton setAlpha:1]; 
    } 

    for(UIButton *decimalButton in nonBinaryValueCollection) 
    { 
     decimalButton.enabled = YES; 
     [decimalButton setAlpha:1]; 
    } 
} 
+0

ちょうど副次的な点は、ドットと括弧で表記された表記が互いに隣り合っていることを少し奇妙に見ることができます(この場合、一貫して扱いやすくなります)。 –

答えて

4

コード自体に「間違った」ものはありません。あなたはここに何を持っています透明度;読者は何が起こっているかをすぐに理解し理解することができます。

代わりに、ループを1つ持つことができるように、メモリの割り当てとオブジェクトのコピーが必要です。しかし最終的には、パフォーマンスは悪化しています(厳密に言えば)。

しかし、どうしてもと言うならば、これはどう:

NSMutableArray *buttons = [[[NSMutableArray alloc] initWithArray:nonOctalValueCollection] autorelease]; 
[buttons addObjectsFromArray:nonBinaryValueCollection]; 

for(UIButton *decimalButton in buttons) 
{ 
    decimalButton.enabled = YES; 
    [decimalButton setAlpha:1]; 
} 

(。あなたはARCを使用している場合autoreleaseをオフのまま)

+0

がうまくいけば、これは完全に動作します。ありがとうございました – Joey

2

が、これは、あなたがそれを作ることができる最も簡単なことだと思います。あるいは、コードを別のメソッドにリファクタリングして、両方の配列をこのメソッドに渡すこともできます。

NSMutableArray *allButtons = [NSMutableArray array]; 
[allButtons addObjectsFromArray:nonOctalValueCollection];  
[allButtons addObjectsFromArray:nonBinaryValueCollection]; 

for (UIButton *button in allButtons) { 
    button.enabled = YES; 
    button.alpha = 1; 
} 
1

方法について:

- (IBAction)enableDecimalValues 
{ 
    NSArray *combinedArray = 
       [nonOctalValueCollection 
         arrayByAddingObjectsFromArray:nonBinaryValueCollection]; 

    [combinedArray makeObjectsPerformSelector:@selector(setEnabled:) 
            withObject:[NSNumber numberWithBool:YES]]; 

    [combinedArray makeObjectsPerformSelector:@selector(setAlpha:) 
            withObject:[NSNumber numberWithFloat:1.0f]]; 
} 

または:

- (IBAction)enableDecimalValues 
{ 
    NSArray *combinedArray = 
       [nonOctalValueCollection 
         arrayByAddingObjectsFromArray:nonBinaryValueCollection]; 

    [combinedArray enumerateObjectsUsingBlock: 
     ^(UIButton *button, NSUInteger idx, BOOL *stop) 
     { 
       button.enabled = YES; 
       button.alpha = 1.0f; 
     }]; 
} 

にリードする:

- (IBAction)enableDecimalValues 
{ 
    [[nonOctalValueCollection 
      arrayByAddingObjectsFromArray:nonBinaryValueCollection] 
       enumerateObjectsUsingBlock: 
        ^(UIButton *button, NSUInteger idx, BOOL *stop) 
        { 
          button.enabled = YES; 
          button.alpha = 1.0f; 
        }]; 
} 
4

それはあなたがそれをDRYにしようとしているように私には思えるし、繰り返されるビットは、体内で起こっていることです。 fループ。あなたは一つだけのコレクションを反復処理する必要がちょうどので、私はこの

void (^block)(UIButton *button, NSUInteger idx, BOOL *stop) = 
^(UIButton *button, NSUInteger idx, BOOL *stop) { 
    button.enabled = YES; 
    button.alpha = 1.0f; 
}; 

[nonOctalValueCollection enumerateObjectsUsingBlock:block]; 
[nonBinaryValueCollection enumerateObjectsUsingBlock:block]; 

ような何かをするだろうので、私は新しい配列を割り当てる必要が表示されないこのDRYのそれを、一時の追加割り当てが発生しません。アレイ。

関連する問題