使用string作为名称来设置属性值

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

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; } 

我知道这是行不通的有没有一种可能的方式来做这样的事情?

不不不。

 @property (nonatomic,strong) NSArray *arrayOfDays; 

现在摆脱所有那些天的对象,并填补自己self.arrayOfDays与所有这些个别的日子对象是…

然后…

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

或者更好的是,如果所有这些对象都属于同一types(我假定他们是Daytypes),我们可以这样做:

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

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

 [self.arrayOfDays setValue:self forKeyPath:@"delegate"];