使用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(我假定他们是Day
types),我们可以这样做:
for(Day *day in self.arrayOfDays) { day.delegate = self; }
最佳(根据Daij-Dan的评论):
[self.arrayOfDays setValue:self forKeyPath:@"delegate"];