【发布时间】:2015-08-25 14:23:26
【问题描述】:
考虑以下调用:
NSString* localized = NSLocalizedString([NSString stringWithFormat:@"Hello %@", @"World"], @"");
它有什么问题?我看不出任何本质上的错误,但是编译器/预处理器抱怨传递给它的参数太多。 另一方面,以下两个编译:
显式变量:
NSString* string = [NSString stringWithFormat:@"Hello %@", @"World"];
NSString* localized = NSLocalizedString(string, @"");
用括号括起来:
NSString* localized = NSLocalizedString(([NSString stringWithFormat:@"Hello %@", @"World"]), @"");
看起来预处理器/编译器错误地解析了, 字符。
我在 Xcode 7 beta 6 中得到了这个,所以它可能是 Clang 工具链中的一个新错误。
【问题讨论】:
-
向 Apple 提交错误报告。
-
@rmaddy 我做了,#22418824
-
BTW -
NSLocalizedString的第一个参数不应该是字符串文字吗?请记住,您使用命令行工具gestrings来生成本地化字符串文件。这意味着它只是解析您的源代码文件。根据运行时值定义键是没有意义的。 -
是的,上面的例子感觉不强。我的意思是让格式本身本地化,但这样做是错误的。不过,很酷的错误。
:-) -
@rmaddy 严格来说,你所说的不是真的。我可以自己生成字符串文件,并将我想要的所有可能的动态值作为字符串。这是可能的。
标签: objective-c macros clang xcode7 xcode7-beta6