C # có cú pháp cho phép bạn chỉ định chỉ mục đối số trong một trình xác định định dạng chuỗi, ví dụ:
string message = string.Format("Hello, {0}. You are {1} years old. How does it feel to be {1}?", name, age);
Bạn có thể sử dụng các đối số nhiều lần và cũng có thể bỏ qua các đối số được cung cấp khỏi việc sử dụng. Một câu hỏi khác đề cập đến cùng một định dạng cho C / C ++ ở dạng %[index]$[format]
, ví dụ %1$i
. Tôi đã không thể yêu cầu NSString hoàn toàn tôn trọng cú pháp này, bởi vì nó hoạt động tốt khi bỏ qua các đối số khỏi định dạng. Những điều sau đây không hoạt động như mong đợi (EXC_BAD_ACCESS vì nó cố gắng bỏ qua age
tham số như một NSObject *):
int age = 23;
NSString * name = @"Joe";
NSString * message = [NSString stringWithFormat:@"Age: %2$i", name, age];
Các đối số vị trí chỉ được tôn trọng nếu không có đối số bị thiếu từ định dạng (có vẻ là một yêu cầu kỳ lạ):
NSString * message = [NSString stringWithFormat:@"Age: %2$i; Name: %1$@", name, age];
Tất cả các cuộc gọi này hoạt động bình thường trong OS X:
printf("Age: %2$i", [name UTF8String], age);
printf("Age: %2$i %1$s", [name UTF8String], age);
Có cách nào để đạt được điều này bằng cách sử dụng NSString trong Objective-C / Cocoa không? Nó sẽ hữu ích cho các mục đích địa phương hóa.