Tôi vừa đọc tất cả các biến số toàn cầu mục tiêu-c toàn cầu Q & A nhưng tôi thấy chúng không phù hợp với vấn đề của tôi.Tạo danh sách hằng số biến từ các hằng số khác
Tôi cần một danh sách các biến như thế này:
NSString *baseURL = @"http://example.org";
NSString *mediaURL = @"http://example.org/media/";
NSString *loginURL = @"http://example.org/login/";
NSString *postURL = @"http://example.org/post/";
etc.
Tất nhiên là tôi không thể sử dụng đoạn mã này vì đó là một cách tiếp cận rất xấu và nếu tôi cần phải thay đổi địa chỉ cơ sở tôi phải thay đổi tất cả các biến. Vì tôi cần những biến để được truy cập từ mọi tầng lớp của ứng dụng Tôi tuyên bố chúng như toàn cầu với phương pháp này:
// 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/"];
NHƯNG tôi không thể làm điều này bởi vì tôi gặp lỗi này:
Initializer element is not a compile-time constant
Điều này xảy ra vì các đối tượng hoạt động trong thời gian chạy.
Bây giờ câu hỏi của tôi là, một lần và cho tất cả tôi hy vọng, một cách tốt đẹp và tốt để xử lý kịch bản khá bình thường này trong các ứng dụng mạng là gì?
Tôi nghĩ rằng sử dụng một lớp (hoặc một lớp singleton) để xử lý các biến hằng số là một chút quá mức cần thiết, và nó cũng quá tiết sử dụng một cái gì đó như [MyClass globalVar]
mỗi khi tôi cần nó.
Ý tưởng về nó?
Uhm, không xấu ạ. Vì vậy, trong trường hợp này tôi chỉ cần một tệp .h, phải không? –
@FredCollins yes .. –
Có. Các định nghĩa chỉ là thay thế trước khi biên dịch chữ. (Mặc dù, để được bán tiêu chuẩn, người ta có thể đổi tên chúng thành FC_BASE_URL và FC_MEDIA_URL hoặc một cái gì đó sắp xếp.) –