这个 %1$@%2$d 格式说明符在 objective c 中意味着什么

What does this %1$@%2$d format specifier means in objective c

我一直在使用格式说明符,但它们像 %d%@ 一样通用,但今天在教程中我看到这些 %1$@%2$d 并且不明白它们代表什么.
这是一个计算器示例,因此他们在此声明中使用它们:stack = [NSString stringWithFormat:@"%1$@%2$d",stack,number];

数字代表位置参数。格式字符串后面的参数根据它们在参数列表中的位置插入到字符串中。第一个参数进入 %1 槽,第二个进入 %2 槽,依此类推。目的是处理 terms/words/etc 的顺序可能与您的默认顺序不同的语言。您无法在运行时更改参数顺序,但可以确保参数在字符串中的正确位置结束。

例子

NSLog(@"%1$@, %2$@", @"Red", @"Blue");
NSLog(@"%2$@, %1$@", @"Red", @"Blue");

输出

Red, Blue
Blue, Red

请注意,格式字符串已更改,但参数顺序相同。

因此您的格式说明符 %1$@ %2$d 表示:

%1$@ 对于 %@(Objective-C 对象) 第一个参数

%2$d for %d*(有符号 32 位整数 (int))* with 第二个参数.

这 $0、$1、$2 是 shorthand 参数名称,类似于闭包

“Swift 自动为内联闭包提供 shorthand 参数名称,可用于通过名称 $0、$1、$2 等来引用闭包参数的值。 ”