Po prostu przeczytałem wszystkie z .-c zmienne globalne stałe A ale znalazłem je nieodpowiednie dla mojego problemu.Zbuduj listę zmiennych stałych z innych stałych
muszę listę zmiennej takiego:
NSString *baseURL = @"http://example.org";
NSString *mediaURL = @"http://example.org/media/";
NSString *loginURL = @"http://example.org/login/";
NSString *postURL = @"http://example.org/post/";
etc.
Oczywiście nie mogę użyć tego kodu, ponieważ jest to bardzo złe podejście i jeśli muszę zmienić podstawowy adres URL muszę zmienić wszystkie zmienne. Ponieważ muszę zmienne te mają być dostępne z każdej klasy aplikacji oświadczyłem je jako globalne z takim podejściem:
// 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/"];
ALE Nie mogę tego zrobić, bo ten błąd:
Initializer element is not a compile-time constant
Dzieje się tak, ponieważ obiekty działają w środowisku wykonawczym.
Moje pytanie brzmi: raz na zawsze mam nadzieję, jaki jest dobry i dobry sposób na radzenie sobie z tym dość typowym scenariuszem w aplikacjach sieciowych?
Myślę, że użycie klasy (lub klasy singleton) do obsługi zmiennych stałych jest nieco przesadzone, a także zbyt szczegółowe użycie czegoś takiego jak [MyClass globalVar]
za każdym razem, gdy jest to potrzebne.
Pomysły na ten temat?
Uhm, nie złe sir. Więc w tym przypadku potrzebuję tylko jednego pliku .h, prawda? –
@FredCollins tak .. –
Tak. Definicje są po prostu kompilacją dosłownego zamiennika. (Chociaż, aby być pół-standardem, można zmienić ich nazwę na FC_BASE_URL i FC_MEDIA_URL lub coś w tym rodzaju.) –