Подтвердить что ты не робот

Как установить # NFString для глобального использования?

Я новичок в Objective-C. По сути, я хочу сохранить набор URL-адресов конечных точек в качестве строк для использования в моем приложении, но мне нужен другой домен, основанный на том, работает ли приложение в режиме DEBUG или нет. Я подумал, что было бы полезно использовать заголовочный файл (например, Common.h) с некоторыми простыми способами:

#ifdef DEBUG
    #define kAPIEndpointHost @"http://example.dev"
#else
    #define kAPIEndpointHost @"http://www.example.com"
#endif

#define kAPIEndpointLatest          [kAPIEndpointHost stringByAppendingString:@"/api/latest_content"]
#define kAPIEndpointMostPopular     [kAPIEndpointHost stringByAppendingString:@"/api/most_popular"]

Очевидно, что это не сработает, поскольку вы не можете, по-видимому, основывать константу на значении другой константы.

Какой "правильный" способ сделать это? Имеет ли смысл иметь правильный класс с методами класса, которые возвращают правильные значения конечных точек?

РЕДАКТИРОВАТЬ: Чтобы быть понятным, строки "Последние" и "Самые популярные", основанные на строке хоста, - это то, с чем я столкнулся. Компилятор не любит stringByAppendingString часть #defines.

4b9b3361

Ответ 1

Если вы просто конкатенируете строки, вы можете использовать конкатенацию строки компиляции:

#ifdef DEBUG
    #define kAPIEndpointHost @"http://example.dev"
#else
    #define kAPIEndpointHost @"http://www.example.com"
#endif

#define kAPIEndpointLatest          (kAPIEndpointHost @"/api/latest_content")
#define kAPIEndpointMostPopular     (kAPIEndpointHost @"/api/most_popular")

Ответ 2

Мне не нравится использовать #defines для строковых констант. Если вам нужны глобальные константы и компиляция времени компиляции. Я бы использовал следующее:

Заголовочный файл:

extern NSString *const kAPIEndpointHost;
extern NSString *const kAPIEndpointLatestPath;
extern NSString *const kAPIEndpointMostPopularPath;

Файл реализации:

#ifdef DEBUG
#define API_ENDPOINT_HOST @"http://example.dev"
#else
#define API_ENDPOINT_HOST @"http://www.example.com"
#endif

NSString *const kAPIEndpointHost = API_ENDPOINT_HOST;
NSString *const kAPIEndpointLatestPath = (API_ENDPOINT_HOST @"/api/latest_content");
NSString *const kAPIEndpointMostPopularPath = (API_ENDPOINT_HOST @"/api/most_popular");

Ответ 3

В вашем файле заголовка:

extern NSString *const kAPIEndpointHost;
extern NSString *const kAPIEndpointLatestPath;
extern NSString *const kAPIEndpointMostPopularPath;

В вашем файле реализации:

#ifdef DEBUG
    NSString *const kAPIEndpointHost = @"http://example.dev";
#else
    NSString *const kAPIEndpointHost = @"http://www.example.com";
#endif

NSString *const kAPIEndpointLatestPath = @"/api/latest_content";
NSString *const kAPIEndpointMostPopularPath = @"/api/most_popular";