使用字符串作为名称来设置属性值 [英] Using a string as name to set property values
问题描述
我在项目中有这些巨大的重复代码块,我试图将它们缩小。以这个例子为例:
I have these big huge repetitive chunks of code in my project I am attempting to shrink them down. Take this piece example:
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循环或类似缩小的东西它像这样:
What I would like to do is make it that I can use a for loop or something similar to shrink it down like this:
for (int i = 1 ; i<=9; i++) {
NSString *var = [NSString stringWithFormat:@"Day1%d",i];
self.var.delegate = (id)self;
}
我知道这不起作用是否有可能的方法做这样的事情?
I know this doesn't work is there a possible way to do something like this?
推荐答案
不,不,不。
@property (nonatomic,strong) NSArray *arrayOfDays;
现在摆脱所有那些日期对象并填写 self.arrayOfDays
包含所有这些个别日期对象...
Now get rid of all those day objects and fill that self.arrayOfDays
with whatever all those individual day objects are...
然后......
for(int i=0; i<[self.arrayOfDays count]; ++i) {
[[self.arrayOfDays objectAtIndex:i] setDelegate: self];
}
或者更好,如果所有这些对象属于同一类型(我'假设它们的类型为 Day
),我们可以这样做:
Or even better, if all those objects are of the same type (I'll assume they're of type Day
), we can do:
for(Day *day in self.arrayOfDays) {
day.delegate = self;
}
最佳(根据Daij-Dan的评论):
Best (per Daij-Dan's comment):
[self.arrayOfDays setValue:self forKeyPath:@"delegate"];
这篇关于使用字符串作为名称来设置属性值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!