objective-c - Objective c 实现方法,它接受参数数组

标签 objective-c arrays methods

嘻嘻

有谁知道如何在 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/

相关文章:

iphone - Cocoa-Touch,核心数据 : Linker error, 未找到 NSManagedObject 符号

php - 在 foreach 中获取当前索引的名称

arrays - Swift:在数组中的句子中搜索字符串

javascript - 添加或更新数组元素

java - 如何重用 TestNG 中的方法?

java - (Java) 将参数从构造函数传递给类的所有方法

javascript - 当我使用方法作为回调时,它似乎失去了对 `this` 的访问权限。为什么?

objective-c - 观察派生属性的变化: CALayer KVO example

ios - 无法使用 MFSidemenu 加载 viewController

objective-c - 向主运行循环添加源是否会影响主应用程序操作?