1

如何在 #define 语句中放置一个对象,如下所示:

#define PlacesURL @"https://maps.googleapis.com/maps/api/place/search/xml?location=34.0522222,-118.2427778&radius=500&types=**bar**&sensor=false&key=MyAPIKey"

因此,代替bar我想做 %@ 之类的操作,但不确定如何存储 %@ 对象。另外,我将在哪里存储对象 - 在#define 指令上方?我想存储酒吧、餐馆、咖啡店等...以便从 iOS 应用程序进行 Google Places Api 搜索。

4

3 回答 3

4

据我了解,您有两种选择:

#define PLACES     @"bar,restaurants"
#define PlacesURL  ([NSString stringWithFormat: @"https://maps.googleapis.com/maps/api/place/search/xml?location=34.0522222,-118.2427778&radius=500&types=%@&sensor=false&key=MyAPIKey", PLACES])

或者

#define PlacesURL( places ) ([NSString stringWithFormat: @"https://maps.googleapis.com/maps/api/place/search/xml?location=34.0522222,-118.2427778&radius=500&types=%@&sensor=false&key=MyAPIKey", places])

第二个可能是您想要的,尽管两者都没有意义...

于 2012-08-14T13:51:42.430 回答
1

你应该遵循代码:

#define PlacesURL(value) ([NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/search/xml?location=34.0522222,-118.2427778&radius=500&types=%@&sensor=false&key=MyAPIKey", value])

#define语句必须有括号。让我们看看下面的例子。您必须返回预期的结果是 900,但会出现 230。这只是一种示例。你一定不要忘记括号。括号中的句子的开头和结尾,以及每个句子的结尾必须在适当的位置。

#define A 10
#define B 20
#define C A+B
// not 900, result value is 230. 'Cause, proceed as follows: A+B*A+B
NSLog(@"value:%d", C*C); 
于 2012-08-14T13:50:50.290 回答
1

在 C 中,任何两个一起列出的常量字符串都被认为是一个字符串,因此以下任何一个都是等价的:

a = "abc123xyz";

b = "abc" "123" "xyz";

#define FOO "123"
c = "abc" FOO "xyz";

所以,你可以像这样做你想做的事:

#define BAR "whatever"
#define PlacesURL "https://maps.googleapis.com/maps/api/place/search/xml?location=34.0522222,-118.2427778&radius=500&types=" BAR "&sensor=false&key=MyAPIKey"

但是,这似乎是一件很奇怪的事情?您是否尝试在运行时粘贴栏名称?如果是这样,您需要使用 sprintf 来完成(注意%s中的PlacesURL):

#define PlacesURL "https://maps.googleapis.com/maps/api/place/search/xml?location=34.0522222,-118.2427778&radius=500&types=%s&sensor=false&key=MyAPIKey"

char *get_url(char *bar) {
  char url[1000];

  sprintf (url, PlacesURL, bar);
  return strdup(url);
}

然后调用函数必须free(url)在它完成时。

于 2012-08-14T13:51:06.913 回答