有没有办法简化这种方法?也许是和&& amp;两个陈述在一个for循环中一起?
// 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
。)
答案 1 :(得分:4)
在我看来,你正试图让它干涸,而重复的一点就是循环体中发生的事情。我没有看到需要分配一个新数组,所以你只需迭代一个集合所以我会做这样的事情
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就是这样,不会产生临时阵列的额外分配。
答案 2 :(得分:2)
认为这是最简单的你可以做到的。或者,您可以将代码重构为另一个方法,并将两个数组传递给此方法。
NSMutableArray *allButtons = [NSMutableArray array];
[allButtons addObjectsFromArray:nonOctalValueCollection];
[allButtons addObjectsFromArray:nonBinaryValueCollection];
for (UIButton *button in allButtons) {
button.enabled = YES;
button.alpha = 1;
}
答案 3 :(得分: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;
}];
}