Ho appena letto tutte le variabili di costanti globali dell'obiettivo -c Q & A ma le ho trovate inadatte al mio problema.Costruisci un elenco di costanti variabili da altre costanti
ho bisogno di un elenco di variabili come questo:
NSString *baseURL = @"http://example.org";
NSString *mediaURL = @"http://example.org/media/";
NSString *loginURL = @"http://example.org/login/";
NSString *postURL = @"http://example.org/post/";
etc.
Naturalmente non posso usare questo codice, perché è un approccio molto male e se ho bisogno di cambiare l'URL di base devo cambiare tutte le variabili. Da quando ho bisogno di queste variabili a cui accedere da ogni classe delle app li ho dichiarato come globale con questo approccio:
// Constants.h
extern NSString *const baseURL;
extern NSString *const mediaURL;
extern NSString *const loginURL;
extern NSString *const postURL;
// Constants.m
NSString *const baseURL = @"http://example.org";
NSString *const mediaURL = [NSString stringWithFormat:"%@%@", baseURL, @"/media/"];
NSString *const loginURL = [NSString stringWithFormat:"%@%@", baseURL, @"/login/"];
NSString *const postURL = [NSString stringWithFormat:"%@%@", baseURL, @"/post/"];
MA non posso farlo perché ho ottenere questo errore:
Initializer element is not a compile-time constant
Ciò accade perché gli oggetti funzionano in fase di esecuzione.
Ora la mia domanda è, una volta e per tutte, spero, qual è un buon modo per gestire questo scenario piuttosto comune nelle app di rete?
Penso che usare una classe (o una classe singleton) per gestire le variabili delle costanti sia un po 'eccessivo, ed è anche troppo prolisso usare qualcosa come [MyClass globalVar]
ogni volta che ne ho bisogno.
Idee a riguardo?
Uhm, non male signore. Quindi in questo caso ho bisogno di un solo file .h, giusto? –
@FredCollins sì .. –
Sì. Le definizioni sono solo sostituzioni letterali precompilate. (Anche se, per essere semi-standard, si potrebbero rinominarli come FC_BASE_URL e FC_MEDIA_URL o qualcosa del genere.) –