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有没有实现这一点的方法?这将有助于本地化.

推荐答案

NSString和CFString支持可重排序/位置参数.

NSString *string = [NSString stringWithFormat: @"Second arg: %2$@, First arg %1$@", @"<1111>", @"<22222>"];
NSLog(@"String = %@", string);

此外,请参见第Apple: String Resources 页的文档

Objective-c相关问答推荐

恢复 iOS7 之前的 UINavigationController pushViewController 动画

目标 C:什么是(id)发件人?

Objective-C 中的实例变量是否默认设置为 nil?

Xcode 的任何 ReSharper 类似功能?

如何打印 NSMutableURLRequest?

iOS UIImageView 缩小图像在 iPad 2 上产生锯齿图像

UISearchbar 键盘搜索按钮操作

iOS 应用程序下一个键不会转到下一个文本字段

如何在 UICollectionView 中居中行?

NSMutableDictionary 线程安全

如何转储存储在 Objective-C 对象(NSArray 或 NSDictionary)中的数据

从 UIPageViewController 中移除视图控制器

如何在 Cocoa 中获取 NSArray 的第一个 x 元素?

在 32 位和 64 位架构上格式化 NS(U)Integer 时类型转换的替代方法?

如何逐行从 NSFileHandle 读取数据?

Xcode:无法判断应用程序包

无法在导航栏中心设置titleView,因为返回按钮

CMTime 秒输出

如何在 iPhone SDK 中包含和使用新字体?

无法更改 UILabel 文本 colored颜色