2012-04-04 3 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 만들려고 노력하는 나에게 보인다과 반복되는 비트는 신체에서 일어나는 일입니다. 루프. 당신은 단지 하나 명의 컬렉션을 반복 할 필요가 단지 내가이

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의 그것을 임시의 추가 할당이 발생하지 않습니다 정렬.

관련 문제