C#的语法允许您以字符串格式说明符指定参数索引,例如:
string message = string.Format("Hello, {0}. You are {1} years old. How does it feel to be {1}?", name, age);
您可以多次使用参数,也可以忽略提供的参数.Another question以%[index]$[format]
的形式提到了C/C++的相同格式,例如%1$i
.我无法让NSString遵守这种语法,因为它在从格式中删除omitting arguments时表现良好.以下操作无法按预期工作(EXC_BAD_ACCESS,因为它试图将age
参数作为NSObject*取消引用):
int age = 23;
NSString * name = @"Joe";
NSString * message = [NSString stringWithFormat:@"Age: %2$i", name, age];
只有当格式中没有缺少参数时(这似乎是一个奇怪的要求),才会考虑位置参数:
NSString * message = [NSString stringWithFormat:@"Age: %2$i; Name: %1$@", name, age];
所有这些调用在OS X中都能正常工作:
printf("Age: %2$i", [name UTF8String], age);
printf("Age: %2$i %1$s", [name UTF8String], age);
在Objective-C/Cocoa中使用NSString有没有实现这一点的方法?这将有助于本地化.