在Objective-C中,%1$@%2$d格式说明符代表什么意思?

7

我一直在使用格式说明符,但它们都是通用的,比如%d%@,但今天在一个教程中我看到了这样的 %1$@%2$d,不明白它们代表什么。
这是一个计算器示例,所以他们在这个语句中使用它们:stack = [NSString stringWithFormat:@"%1$@%2$d",stack,number];

2个回答

14

数字代表位置参数。紧随格式字符串之后的参数将根据它们在参数列表中的位置插入到字符串中。第一个参数放入%1槽中,第二个参数放入%2槽中,以此类推。其目的是处理诸如术语/单词等顺序可能与默认值不同的语言。您无法在运行时更改参数顺序,但可以确保将参数放置在字符串中的正确位置。

示例

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

输出

Red, Blue
Blue, Red

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


1
我明白了。但是为什么我们要使用“$”符号? - Chaudhry Talha
这太棒了,我从来不知道这个! - Albert Renshaw
1
$是位置的一部分。我在示例中只是忘记加上它们了。这有点打字错误。 - Avi

1

因此,您的格式说明符%1$@ %2$d的含义如下:

%1$@代表使用第一个参数%@(Objective-C对象)和

%2$d代表使用第二个参数%d*(带符号32位整数(int))。

这里的$0、$1、$2是类似于闭包中的简写参数名称。

“Swift会自动为内联闭包提供简写参数名称,可以使用名称$0、$1、$2等来引用闭包参数的值。”


1
这与闭包无关。OP正在使用Objective-C,但这在这里也不相关。$1、$2等是位置指示符,由IEEE printf规范定义。 - Rhys Morgan
太棒了,谢谢!我刚开始只是想从使用Swift的角度来考虑这些问题。你帮我还原了它们最初的含义! :) - Vitya Shurapov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接