Вопрос:

Использование строки в качестве имени для установки значений свойств

ios objective-c

298 просмотра

1 ответ

17 Репутация автора

У меня есть эти большие огромные повторяющиеся куски кода в моем проекте, я пытаюсь уменьшить их. Возьмите этот пример:

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;

}

Я знаю, что это не работает, есть ли способ сделать что-то подобное?

Автор: user1953754 Источник Размещён: 18.01.2014 09:40

Ответы (1)


4 плюса

51430 Репутация автора

Решение

Нет нет нет.

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

Лучший (согласно комментарию Дай-Дана):

[self.arrayOfDays setValue:self forKeyPath:@"delegate"];
Автор: nhgrif Размещён: 18.01.2014 09:43
Вопросы из категории :
32x32