2014-01-18 132 views
2

我在我的项目中有这些巨大的重复块代码,我试图缩小它们。拿这块例如:使用字符串作为名称来设置属性值

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

这听起来像你需要一个数组。而且,那些投给'(id)'的投票是多余的,*可怕的。* – 2014-01-18 21:42:58

回答

5

不,不,不。

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

Best(per Daij-Dan's comment):

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

谢谢,这正是我所期待的!对不起,我是新的Objective-C的错误代码。 – user1953754

+0

等待,使用第二种方法,我从不兼容的类型* const__strong''分配给'id uitextfielddelegate'的黄色标记# – user1953754

+0

固定无所谓 – user1953754

相关问题