嘻嘻
有谁知道如何在 objective c 中实现一个将参数数组作为参数的方法,例如:
[NSArray arrayWithObjects:@"A",@"B",nil];
这个方法的方法声明是:
+ (id)arrayWithObjects:(id)firstObj...
我自己好像做不到这样的方法。我做了以下事情:
+ (void) doSometing:(id)string manyTimes:(NSInteger)numberOfTimes;
[SomeClass doSometing:@"A",@"B",nil manyTimes:2];
它会给函数 'doSometing:manyTimes:' 的参数太多的警告
已经谢谢了。
最佳答案
省略号(...)继承自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);
}
编辑:添加,以回应评论。由于 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];
}
关于objective-c - Objective c 实现方法,它接受参数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5260840/