2017-02-01 27 views
0

Пусть у нас есть метод опроса, которые потребляют услуги и базы на ответ (типСобытия) вызов обработчика, что-то вроде (только идея):Упростить банду Обработчиков

-(void)pollData { 
    [[ProjectApi sharedInstance] getEvent:^(NSDictionary *event){ 
      EventType type = /*Take eventType*/ 
      switch (type) { 
       case type1: 
        [self handleType1WithResponse:event]; 
        break; 
       case type2: 
        [self handleType2WithResponse:event]; 
        break; 
       ... 
       case typeN: 
        [self handleTypeNWithResponse:event]; 
        break; 

      } 
    }]; 
} 

Как вы можете видеть есть куча обработчика, есть ли шаблон, упрощающий это (или более элегантный способ, одна цель - уменьшить ответственность ViewController, но часть этого метода может взаимодействовать с контроллером)? (Помимо делегирования или создания классов обработчиком).

ответ

0

Один из способов: построить строку из некоторого скалярного типа ...

int type = 7; // say it's an int 
NSString *string = [NSString stringWithFormat:@"handleType%dWithResponse:", type]; 

Затем построить селектор из строки:

SEL selector = NSSelectorFromString(string); 

Затем выполните селектор. (Также не было бы плохой идеей сначала проверить, есть ли у вас метод) ...

if ([self respondsToSelector:selector]) { 
    [self performSelector:selector withObject:event]; 
}