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アプリからのGooglePlacesApi検索用に、バー、レストラン、コーヒーショップなどを保存したいと思います。

4

3 に答える 3

4

私の理解では、次の 2 つのオプションがあります。

#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])

どちらも少し無意味ですが、2番目のものはおそらくあなたが望むものです...

于 2012-08-14T13:51:42.430 に答える
1

C では、一緒にリストされた 2 つの定数文字列は 1 つの文字列と見なされるため、次のいずれも同等です。

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 に答える
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 に答える