2012-11-07 43 views
2

有沒有辦法使用for循環來執行下面的代碼?使用for循環爲多個對象分配,初始化和設置屬性?

bar1 = [[UIView alloc] init]; 
    bar1.backgroundColor = [UIColor blueColor]; 
    [self addSubview:bar1]; 

    bar2 = [[UIView alloc] init]; 
    bar2.backgroundColor = [UIColor blueColor]; 
    [self addSubview:bar2]; 

    bar3 = [[UIView alloc] init]; 
    bar3.backgroundColor = [UIColor blueColor]; 
    [self addSubview:bar3]; 

    bar4 = [[UIView alloc] init]; 
    bar4.backgroundColor = [UIColor blueColor]; 
    [self addSubview:bar4]; 

    bar5 = [[UIView alloc] init]; 
    bar5.backgroundColor = [UIColor blueColor]; 
    [self addSubview:bar5]; 

回答

2

你可以使用C數組:

enum { NBars = 5 }; 

@implementation MONClass 
{ 
    UIView * bar[NBars]; // << your ivar. could also use an NSMutableArray. 
} 

- (void)buildBars 
{ 
    for (int i = 0; i < NBars; ++i) { 
    bar[i] = [[UIView alloc] init]; 
    bar[i].backgroundColor = [UIColor blueColor]; 
    [self addSubview:bar[i]]; 
    } 
} 

,或者您可以使用NSArray

@interface MONClass() 
@property (nonatomic, copy) NSArray * bar; 
@end 

@implementation MONClass 

- (void)buildBars 
{ 
    NSMutableArray * tmp = [NSMutableArray new]; 
    enum { NBars = 5 }; 
    for (int i = 0; i < NBars; ++i) { 
    UIView * view = [[UIView alloc] init]; 
    view.backgroundColor = [UIColor blueColor]; 
    [tmp addObject:view]; 
    [self addSubview:view]; 
    } 
    self.bar = tmp; 
} 

,或者如果你想留住那些單獨的屬性,你可以'串行鍵入'並使用KVC:

- (void)buildBars 
{ 
    enum { NBars = 5 }; 
    // if property names can be composed 
    for (int i = 0; i < NBars; ++i) { 
    UIView * theNewView = ...; 
    [self setValue:theNewView forKey:[NSString stringWithFormat:@"bar%i", i]]; 
    } 
} 

- (void)buildBars 
    // else property names 
    for (NSString * at in @[ 
    // although it could use fewer characters, 
    // using selectors to try to prevent some errors 
    NSStringFromSelector(@selector(bar0)), 
    NSStringFromSelector(@selector(bar1)), 
    NSStringFromSelector(@selector(bar2)), 
    NSStringFromSelector(@selector(bar3)), 
    NSStringFromSelector(@selector(bar4)) 
    ]) { 
     UIView * theNewView = ...; 
     [self setValue:theNewView forKey:at]; 
    } 
} 

,但也有一些其他的選擇。希望這足以讓你開始!

+2

爲什麼是C數組? –

+0

@AlanZeino在評論中我也說過可以使用'NSMutableArray'。這足以證明這種形式,並且適用於固定大小的陣列。 ARC將清理它。 – justin

+0

哦,對不起。我誤解了您網頁上的訊息。 – pasawaya