使用多个#define语句来创建URL

时间:2013-09-19 12:06:40

标签: iphone objective-c ipad

我想在我的应用中定义基本网址:

#define kBaseURL @"http://mydomain.com/"

并且还可以使用此作为基础创建其他URL

#define kProductsURL @"/products"

我知道我可以这样做:

NSString *urlString = [NSString stringWithFormat:@"%@%@", kBaseURL,kProductsURL];

如何更改kProductsURL我只能使用kProductsURL进行字符串格式化?

我知道你可以用#define语句做很多事,但我找不到好的教程或文档。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:3)

您可以简单地将#define连接起来,如下所示:

#define kBaseURL     @"http://mydomain.com"
#define kProductsURL kBaseURL@"/products"

// kProductsURL becomes http://mydomain.com/products

修改:以其他答案和评论为基础......

但是some developers考虑​​使用#define作为代码气味。另一种方法是使用const s。这比使用#define更有优势,因为当您编辑const的内容时,它不需要编译整个项目。

URLs.h档案:

extern NSString * const kBaseURL;
extern NSString * const kProductsPath;
NSString *GenerateMyURL(NSString *path);

URLs.m档案:

NSString * const kBaseURL = @"http://mydomain.com";
NSString * const kProductsPath = @"/products";

NSString * GenerateMyURL(NSString *path)
{
    return [kBaseURL stringByAppendingPathComponent:path];
}

用法:

NSString *productsURL = GenerateMyURL(kProductsPath);
// Do whatever...

答案 1 :(得分:1)

您可以这样做:

#define kBaseURL(extension)  [NSString stringWithFormat:@"http://mydomain.com/%@", extension]

并在您的代码中使用下一步:

NSString *urlString = kBaseURL(kProductsURL);
// urlString becomes http://mydomain.com/products

++