使用字符串作为名称来设置属性值 [英] Using a string as name to set property values

查看:140
本文介绍了使用字符串作为名称来设置属性值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆