2014-01-18 2 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 (int i = 1 ; i<=9; i++) { 
    NSString *var = [NSString stringWithFormat:@"Day1%d",i]; 

    self.var.delegate = (id)self; 

} 

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

+1

Похоже, вам нужен массив. Кроме того, эти приведения к '(id)' излишни и * ужасны. * –

ответ

5

Нет, нет, нет.

@property (nonatomic,strong) NSArray *arrayOfDays; 

Теперь избавиться от всех этих объектов день и заполнить эту self.arrayOfDays с тем, что все эти отдельные объекты день являются ...

Тогда ...

for(int i=0; i<[self.arrayOfDays count]; ++i) { 
    [[self.arrayOfDays objectAtIndex:i] setDelegate: self]; 
} 

Или еще лучше, если все эти объекты одного типа (я предполагаю, что они имеют тип), мы можем сделать:

for(Day *day in self.arrayOfDays) { 
    day.delegate = self; 
} 

Лучший (за комментарий Дай-Дан):

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

Спасибо, это именно то, что я искал! Извините за неправильный код. Я новичок в объективе-c. – user1953754

+0

Подождите, используя второй способ, я получаю желтый флаг 'присваивание 'id uitextfielddelegate' из несовместимого типа * const __strong'' – user1953754

+0

Исправлено Nevermind – user1953754

Смежные вопросы