写这段代码的更短的方法是?

问题描述:

我知道如何使所有这些uiimageviews消失并再次回来,但我不知道如何写这个更短。他们都被分配了唯一的标签1-35。我想检查它们是否全部隐藏,然后执行操作。写这段代码的更短的方法是?

if(test.hidden==YES 
     && test2.hidden==YES 
     && test3.hidden==YES 
     && test4.hidden==YES 
     && test5.hidden==YES 
     && test6.hidden==YES 
     && test7.hidden==YES 
     && test8.hidden==YES 
     && test9.hidden==YES 
     && test10.hidden==YES 
     && test11.hidden==YES 
     && test12.hidden==YES 
     && test13.hidden==YES 
     && test14.hidden==YES 
     && test15.hidden==YES 
     && test16.hidden==YES 
     && test17.hidden==YES 
     && test18.hidden==YES 
     && test19.hidden==YES 
     && test20.hidden==YES 
     && test21.hidden==YES 
     && test22.hidden==YES 
     && test23.hidden==YES 
     && test24.hidden==YES 
     && test25.hidden==YES 
     && test26.hidden==YES 
     && test27.hidden==YES 
     && test28.hidden==YES 
     && test29.hidden==YES 
     && test30.hidden==YES 
     && test31.hidden==YES 
     && test32.hidden==YES 
     && test33.hidden==YES 
     && test34.hidden==YES 
     && test35.hidden==YES){ 
do something 
} 
+1

不要比较'== YES'。 '如果(条件)'足够了。 'if(condition == YES)'可能失败,因为任何非零值都是真值,但可能不等于1('YES')。 – kennytm 2010-02-20 06:07:24

+0

这对我来说似乎有些过分偏执。如果该方法被定义为返回一个BOOL并返回一个BOOL以外的内容,那么这是一个非常重要的失败。我希望Cocoa实际上不会那样做...... – 2010-02-20 07:18:11

假设你的意思是标签在上的UIView的-tag方法,而这些观点都在containerView

BOOL allHidden = YES; 
for (int i = 1; allHidden == YES && i <= 35; i++) { 
    allHidden = [[containerView viewWithTag:i] isHidden]; 
} 
if (allHidden) { 
    do_something(); 
} 

如何保持一组测试呢?

然后,你可以简单地这样做:

int testresult = 0; 
for(i = 0; i < 35; i++){ 
    if(test[i].hidden != YES){ 
     testresult = 1; 
     break; 
    } 
} 

if(testresult == 0){ 
    // all tests = yes 
} 

注意这个使用C数组,而不是一个NSArray。原则上你应该从拥有大量类似命名的变量转换为这些东西的数组 - 在ObjC中,建议使用NSArray(根据对此答案的评论)。

+0

为什么他在ObjC中编程时会使用C数组? – 2010-02-20 06:05:42

+0

@Colin,C数组不允许在ObjC中? – 2010-02-20 06:07:17

+1

他们被允许,但NSArrays负责清理它们在释放时保存的对象。 – Eld 2010-02-20 06:11:46

http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/KeyValueCoding/Concepts/BasicPrinciples.html#//apple_ref/doc/uid/20002170-BAJEAIEE

这可能不准确,但这样的:

BOOL retVal = test.hidden ; 
for (int i = 2; i < 36 && retVal; ++i) { 
    id x = [self valueForKey:[NSString stringFromFormat:@"test%d", i]]; 
    retVal = retVal && x.hidden ; 
} 
if (retVal) { 
    // do something 
} 

虽然我认为存储一个NSArray测试对象会更好。

他们全部包含在相同的上海华?如果是这样,请尝试利用它们已经在数组中的事实:

@implementation UIView (testForHiddenSubviews) 

- (BOOL) hasHiddenSubviews 
    { 
    for (UIView *view in self.subviews) 
    if (view.hidden) 
    return YES; 
    return NO; 
    } 

- (BOOL) allSubviewsHidden 
    { 
    for (UIView *view in self.subviews) 
    if (!view.hidden) 
     return NO; 
    return YES; 
    } 

@end