Come evitare enormi funzioni con enumerazioni e se-else o switch case quando si ha a che fare con la risposta del server in iOS?

3

nella mia domanda, Ho un tipo di richiesta associato a una varietà di chiamate API che faccio al server REST. quando la risposta dal server arriva nello stesso metodo delegato per la risposta del motore Web,

Devo controllare il tipo di API nell'oggetto di richiesta passato come parametro al metodo delegate e quindi eseguire l'azione corrispondente. Il problema è che ci sono circa 10-12 diversi tipi di richieste API. Pertanto, il caso in cui vengono verificati i diversi enumerati associati ai tipi di API, agisce in base ad esso.

Come sbarazzarsi di questo interruttore "torre"?

    
posta Amogh Talpallikar 11.01.2013 - 17:02
fonte

1 risposta

6

In Objective-C è possibile creare selettori in fase di esecuzione. Ciò consente di inviare il metodo "stringly-type", che rimuove un sacco di codice condizionale (anche se lo sostituisce con qualcosa che ha i suoi problemi). Un esempio che mostra come potrebbe funzionare:

- (void)sendHTTPRequest: (NSString *)request
{
    NSString *requestMethod = [NSString stringWithFormat: "send%@Request", [request upperCaseString]];
    SEL requestSelector = NSSelectorFromString(requestMethod);
    if ([self respondsToSelector: requestSelector])
      [self performSelector: requestSelector];
    else
      [self reportUnknownRequest: request];
}

- (void)sendGETRequest { ... }
- (void)sendPOSTRequest { ... }
- (void)sendDELETERequest { ...}
- (void)reportUnknownRequest: (NSString *)request { ... }

Uso questo approccio per la creazione di parser, per evitare istruzioni di switch di grandi dimensioni e per comportamenti che dipendono dalla classe di un parametro nei casi in cui non è appropriato inserire il comportamento nelle classi di parametri.

    
risposta data 11.01.2013 - 17:11
fonte

Leggi altre domande sui tag