这个%1 $ @%2 $ d格式说明符在目标c中是什么意思

时间:2015-11-04 09:25:08

标签: objective-c format-specifiers

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

2 个答案:

答案 0 :(得分:11)

数字代表位置参数。格式字符串后面的参数根据它们在参数列表中的位置插入字符串。第一个参数进入%1插槽,第二个参数进入%2插槽,依此类推。目的是处理术语/单词/等的顺序可能会从默认值更改的语言。您无法在运行时更改参数顺序,但可以确保参数最终位于字符串中的正确位置。

示例

.theInput {
    -webkit-appearance: none;
    -moz-appearance: none;
    text-overflow: ellipsis;
    color: #333333; 
    outline: none;
    border: 1px solid #E4EBED;
    border-radius: 3px;
    width: 70px;
    height: 32px;
    line-height: 25px;
    font-size: 16px;
    vertical-align: middle;
    background-color: #fff; 
    padding-left:45px;

}


.theLabel {
    position:absolute;
    z-index:999;
    -webkit-appearance: none;
    -moz-appearance: none; 
    color: #333333; 
    outline: none; 
    width: 34px;
    height: 32px;
    line-height: 30px;
    font-size: 20px; 
    background-color: #fff; 
    margin-left:-106px; 
    font-weight: bold;
    cursor:default;
}

输出

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

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

答案 1 :(得分:0)

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

%1 $ @ 用于%@ (目标C对象)的第一个参数

%2 $ d 表示%d * (带符号的32位整数(int))*,带有第二个参数

此$ 0,$ 1,$ 2是速记参数名称,如在Closures中

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