我有一个常量定义为:
#define BEGIN_IMPORT_STRING @"Importing Hands!";
但是当我尝试连接时出现错误:
NSString *updateStr = [NSString stringWithFormat:@"%@%@", BEGIN_IMPORT_STRING, @" - Reading "];
如果我用字符串文字
替换它,就不会发生这种情况NSString *updateStr = [NSString stringWithFormat:@"%@%@", @"foo", @" - Reading "];
或本地字符串
NSString *temp = @"foo";
NSString *updateStr = [NSString stringWithFormat:@"%@%@", temp, @" - Reading "];
答案 0 :(得分:4)
替换
#define BEGIN_IMPORT_STRING @"Importing Hands!";
与
#define BEGIN_IMPORT_STRING @"Importing Hands!"
这是因为您的案例中的编译器会将所有BEGIN_IMPORT_STRING
替换为@"Importing Hands!";
答案 1 :(得分:4)
您需要从#define
#define BEGIN_IMPORT_STRING @"Importing Hands!"
对于编译器,结果行如下所示:
NSString *updateStr = [NSString stringWithFormat:@"Importing Hands!";, @" - Reading "];
答案 2 :(得分:2)
除了接受的答案(删除分号),请注意:
@"Foo"
是 NSString。你甚至可以给它发一条消息。#define FOO @"Foo"
是预处理器宏,而不是常量。这是打字快捷方式。虽然宏不是一种不常见的方法来避免重新输入相同的字符串,但它们是一个不幸的保留。从本质上讲,他们正在玩不再需要的游戏。
对于重复的字符串,我更喜欢:
static NSString *const Foo = @"Foo;
此定义的const
部分确保指针被锁定,因此Foo
不能指向不同的对象。
static
部分将范围限制为文件。如果要从其他文件访问它,请删除static
并将以下声明添加到头文件中:
extern NSString *const Foo;
答案 3 :(得分:1)
你应该使用
NSLocalizedString(@"Importing Hands!", @"Message shown when importing of hands starts");
我把它作为一个答案,因为这看起来像你不想去的东西,并重做你所有的代码。