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

  时间:2022-05-11 08:17:37  阅读量:21  评论数:0  作者:user1953754

我在我的项目中有大量重复的代码块,我正试图缩小它们。以下面这篇文章为例:

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;

现在去掉所有这些day对象,并用所有这些单独的day对象填充它自己。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"];

原文地址(source):原文链接