Передача идентичного сообщения нескольким классам ObjC - PullRequest
0 голосов
/ 22 июня 2010

У меня есть несколько классов, все из которых я хочу отправить идентичное сообщение.Чтобы быть более понятным:

Я хочу отправить doX: withClass: с теми же параметрами для ряда классов.Возможно, код сделает это более понятным:

+ (void)doX:(NSString *)blah {
     [Utility doX:blah withClass:[Foo class]];
     [Utility doX:blah withClass:[Bar class]];
     [Utility doX:blah withClass:[Baz class]];
     [Utility doX:blah withClass:[Garply class]];
}

У меня есть три метода, которые делают нечто похожее на классы, которые реализуют определенный протокол (метод doX: withClass: выполняет ряд шагов, которые предполагают, что классы, данные дляон реализует такой протокол).

У меня такой вопрос, как я могу циклически перебирать классы, чтобы я мог просто добавить в список (в коде - не заинтересован в возможности добавления во время выполнения)добавить его в цикл?

Ответы [ 2 ]

4 голосов
/ 22 июня 2010

Мое предложение было бы передать NSArray из Class объектов:

 [Utility doX:blah withClasses:[NSArray arrayWithObjects:[Foo class], [Bar class], [Baz class], [Garply class], nil]];

 -(void) doX:(Blah) blah withClasses:(NSArray *) classes {
      //[classes makeObjectsPerformSelector:@selector(doX:) withObject:blah]
      for(Class *someClass in classes) {
         [Utility doX:blah withClass:someClass]; 
      }
}
1 голос
/ 23 июня 2010

Не уверен, что вы действительно хотите выполнить цикл здесь.

Если бы это был я, я бы, вероятно, попытался бы использовать Foo, Bar, Baz и Garply для расширения некоторого базового класса, который определяет doX.Тогда ваш базовый класс мог бы наблюдать за бла и вызывать doX, когда он меняется.Но, может быть, я не понимаю, что ты пытаешься сделать.

...