1

我知道该方法stringWithFormat通常使用如下:

[NSString stringWithFormat: @"%@ %@", arg1, arg2];

我的问题是,这个方法的最后一个参数的类型到底是什么(...规范中的那个)。

我希望能够执行以下操作:

NSArray *array = [NSArray arrayWithObjects: @"Hi", @"Bob"];
[NSString stringWithFormat: @"%@ %@", array]

如您所见,一个数据结构array包含所有参数。不幸的是,这不起作用。有没有办法做到这一点,这样我就不必在stringWithFormat方法中明确列出我的所有参数?

4

3 回答 3

5

采取什么类型的论据[NSString stringWithFormat]

无论您使用它的格式字符串告诉它什么类型。

我的问题是,这个方法的最后一个参数的类型到底是什么

这不是最后一个论点。这是一个称为“可变参数函数”(或方法,在这种情况下)的概念。...表示该函数可以采用任意数量的参数。这是 C 的一个特性,您可以通过使用 C 标准库头文件中的类型、宏和函数来使用它<stdarg.h>。示例:这将创建一个包含给定对象的数组。

- (NSArray *)arrayWithCountAndObjects:(int)count, ...
{
    NSMutableArray *arr = [NSMutableArray array];

    va_list args;
    va_start(args, count);
    for (int i = 0; i < count; i++) {
        [arr addObject:va_arg(args, id)];
    }
    va_end(args);

    return arr;
}

但是,应该在这里做的是简单地加入数组中的项目,而不是使用可变参数进行破解,因为这是不必要的:

NSArray *arr = @[@"Hello", @" ", @"world!"];
NSString *s = [arr componentsJoinedByString:@""];
于 2013-03-28T19:54:47.657 回答
0

您不想使用带格式的字符串,如果数组包含字符串,那么您想使用数组方法 componentsJoinedByString:。如果您想在字符串之间留一个空格,只需将 @" " 作为字符串传递。

于 2013-03-28T19:54:15.170 回答
0

它接受可变参数。如果要查找函数的类型,则称为“可变参数”。

在这种特定情况下,这些参数由您指定的格式字符串确定。%@表示任何可可对象(继承自NSObject)。%s表示 ac 字符串(以空字符结尾的字符数组)。%d表示 int,%f表示 float 或 double,依此类推。它们有很多(除了从 C 的函数%@中借来的)。printf您可以在此处找到完整的详细信息:http ://www.cplusplus.com/reference/cstdio/printf/和此处https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/ FormatStrings.html#//apple_ref/doc/uid/20000943

至于你的尝试,那不是它的工作原理。componentsJoinedByString如果需要更多控制,您只需将数组拆分为单独的参数,或者使用, 或手动循环。但是您可以使用 single%@以自己的格式显示数组,可能类似于[First Value; Second Value].

于 2013-03-28T20:04:15.617 回答