2017-02-01 3 views
0

Angenommen, wir haben eine Polling-Verfahren, das einen Service und die Basis auf die Antwort (eventtype) rufen einen Handler verbrauchen, so etwas wie (nur die Idee):ein Bündel Handlers

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

      } 
    }]; 
} 

Wie Sie sehen können Es gibt eine Reihe von Handlern, gibt es ein Muster, um dies zu vereinfachen (oder einen eleganteren Weg, ein Ziel ist es, die ViewController-Verantwortung zu reduzieren, aber einige dieser Methoden könnten mit dem Controller interagieren)? (Neben der Delegierung oder dem Erstellen von Klassen durch den Handler).

Antwort

0

Eine Möglichkeit: eine Zeichenfolge aus skalaren Typ konstruieren ...

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

Dann einen Selektor aus dem String konstruieren:

SEL selector = NSSelectorFromString(string); 

dann die Wähler auszuführen. (Auch wäre nicht eine schlechte Idee, zuerst zu prüfen, ob Sie die Methode haben) ...

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