省略号 (...) 继承自 C;您只能将它用作调用中的最后一个参数(并且您在示例中错过了相关的逗号)。所以在你的情况下,你可能想要:
+ (void)doSomethingToObjects:(id)firstObject, ...;
或者,如果您希望计数是明确的并且可以想出一种很好的措辞方式:
+ (void)doManyTimes:(NSInteger)numberOfTimes somethingToObjects:(id)firstObject, ...;
然后您可以使用普通的 C 方法来处理位于 stdarg.h 中的省略号。有一个关于here 的快速文档,示例用法如下:
+ (void)doSomethingToObjects:(id)firstObject, ...
{
id object;
va_list argumentList;
va_start(argumentList, firstObject);
object = firstObject;
while(1)
{
if(!object) break; // we're using 'nil' as a list terminator
[self doSomethingToObject:object];
object = va_arg(argumentList, id);
}
va_end(argumentList);
}
编辑:添加,以响应 cmets。由于C处理函数调用的方式(由Objective-C继承,尽管不是很明显),您不能将省略号中交给您的各种东西传递给另一个采用省略号的函数。相反,您倾向于传递 va_list。例如
+ (NSString *)doThis:(SEL)selector makeStringOfThat:(NSString *)format, ...
{
// do this
[self performSelector:selector];
// make string of that...
// get the argument list
va_list argumentList;
va_start(argumentList, format);
// pass it verbatim to a suitable method provided by NSString
NSString *string = [[NSString alloc] initWithFormat:format arguments:argumentList];
// clean up
va_end(argumentList);
// and return, as per the synthetic example
return [string autorelease];
}