我一直在使用格式说明符,但它们都是通用的,比如%d
或%@
,但今天在一个教程中我看到了这样的 %1$@%2$d
,不明白它们代表什么。
这是一个计算器示例,所以他们在这个语句中使用它们:stack = [NSString stringWithFormat:@"%1$@%2$d",stack,number];
我一直在使用格式说明符,但它们都是通用的,比如%d
或%@
,但今天在一个教程中我看到了这样的 %1$@%2$d
,不明白它们代表什么。
这是一个计算器示例,所以他们在这个语句中使用它们:stack = [NSString stringWithFormat:@"%1$@%2$d",stack,number];
数字代表位置参数。紧随格式字符串之后的参数将根据它们在参数列表中的位置插入到字符串中。第一个参数放入%1槽中,第二个参数放入%2槽中,以此类推。其目的是处理诸如术语/单词等顺序可能与默认值不同的语言。您无法在运行时更改参数顺序,但可以确保将参数放置在字符串中的正确位置。
示例
NSLog(@"%1$@, %2$@", @"Red", @"Blue");
NSLog(@"%2$@, %1$@", @"Red", @"Blue");
输出
Red, Blue
Blue, Red
请注意格式字符串已更改,但参数顺序未变。
因此,您的格式说明符%1$@ %2$d的含义如下:
%1$@代表使用第一个参数的%@(Objective-C对象)和
%2$d代表使用第二个参数的%d*(带符号32位整数(int))。
这里的$0、$1、$2是类似于闭包中的简写参数名称。
“Swift会自动为内联闭包提供简写参数名称,可以使用名称$0、$1、$2等来引用闭包参数的值。”