使用字符串作为名称来设置属性值

时间:2014-01-18 21:40:00

标签: ios objective-c

我在项目中有这些巨大的重复代码块,我试图将它们缩小。拿这个例子:

self.Day11.delegate = (id)self;
self.Day12.delegate = (id)self;
self.Day13.delegate = (id)self;
self.Day14.delegate = (id)self;
self.Day15.delegate = (id)self;
self.Day16.delegate = (id)self;
self.Day17.delegate = (id)self;
self.Day18.delegate = (id)self;
self.Day19.delegate = (id)self;

我想做的是让我可以使用for循环或类似的东西来缩小它:

   for (int i = 1 ; i<=9; i++) {
    NSString *var = [NSString stringWithFormat:@"Day1%d",i];

    self.var.delegate = (id)self;

}

我知道这不起作用是否有可能做这样的事情?

1 个答案:

答案 0 :(得分:4)

不,不,不。

@property (nonatomic,strong) NSArray *arrayOfDays;

现在摆脱所有那些日子对象并用self.arrayOfDays填充所有那些单独的日期对象......

则...

for(int i=0; i<[self.arrayOfDays count]; ++i) {
    [[self.arrayOfDays objectAtIndex:i] setDelegate: self];
}

甚至更好,如果所有这些对象属于同一类型(我假设它们属于Day类型),我们可以这样做:

for(Day *day in self.arrayOfDays) {
    day.delegate = self;
}

最佳(根据Daij-Dan的评论):

[self.arrayOfDays setValue:self forKeyPath:@"delegate"];
相关问题