2017-02-01 25 views
0

假設我們有一個輪詢方法,消耗的響應(EVENTTYPE)服務和基本呼叫處理程序,類似(只是想法):簡化處理程序的捆綁

-(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]; 
}