Как определить URL-адрес API в Objective-C

Я хочу определить URL-адреса API в одном заголовочном файле, например

#define BASE_URL                    @"http://xxx.xxx.xxx.xxx/api"

#define POSTS                       BASE_URL @"/user_posts"
#define kAPI_GET_POSTS_LIST_URL     POSTS
#define kAPI_ADD_LIKE_URL(id)       POSTS @"/" id @"/like"

......

Но это не работает, когда «id» является динамическим. Есть ли лучшие способы организации URL-адресов API?


person Khoren Markosyan    schedule 28.11.2014    source источник
comment
Я бы рекомендовал не использовать #define. Нет особенно веских причин для этого по сравнению с предоставлением константы NSString.   -  person nhgrif    schedule 28.11.2014
comment
Это и только это правильный ответ.   -  person Amin Negm-Awad    schedule 28.11.2014
comment
Предложение по дизайну: создайте объект, который обрабатывает ваши запросы API, и создайте метод для создания URL-адресов API и используйте NSString* const для констант.   -  person Ben Affleck    schedule 28.11.2014


Ответы (3)


бари или ;),
Вы можете определить так

#define BASE_URL                    @"http://xxx.xxx.xxx.xxx/api"

#define POSTS                       BASE_URL @"/user_posts"
#define kAPI_GET_POSTS_LIST_URL     POSTS
#define kAPI_ADD_LIKE_URL(id)       [NSString stringWithFormat:@"%@/%@/like", POSTS, id]

И использовать его

NSString *someId = @"5";
kAPI_ADD_LIKE_URL(someId);
person l0gg3r    schedule 28.11.2014
comment
мерси ;) но в этом случае надо везде писать [NSString.......], что не очень красиво... но работает)) - person Khoren Markosyan; 28.11.2014
comment
да, если строка генерируется во время выполнения, она не может быть обработана во время компиляции. Поэтому, когда вы объявляете строки в коде, они помещаются в сегмент .DATA в вашем двоичном файле, и их можно объединить по пробелу, но во время выполнения вам нужно вызвать метод времени выполнения, который создаст новую строку. ;) - person l0gg3r; 28.11.2014

попробуй это.

#define kAPI_ADD_LIKE_URL(id)       [NSString stringWithFormat:@"%@/%d/lik",POSTS,id]
person Sunny Shah    schedule 28.11.2014

попробуй это,

#define BASE_URL                    @"http://www.........."
#define POST                        [NSString stringWithFormat:@"%@/user_posts",BASE_URL]
#define kAPI_GET_POSTS_LIST_URL     POSTS
#define kAPI_ADD_LIKE_URL(uri)      [NSString stringWithFormat:@"%@/%@/like",POSTS,uri]

Надеюсь, это поможет :)

person Augustine P A    schedule 28.11.2014