C#的语法允许您以字符串格式说明符指定参数索引,例如:
string message = string.Format("Hello, {0}. You are {1} years old. How does it feel to be {1}?", name, age);
您可以多次使用参数,也可以省略使用时提供的参数。另一个问题提到了C / C ++的相同格式%[index]$[format]
,例如%1$i
。我无法让NSString完全遵守此语法,因为当从格式中省略参数时,它确实表现良好。以下内容无法按预期方式工作(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来实现?这对本地化很有用。