Определите метод, который имеет много (или бесконечных) аргументов - PullRequest
8 голосов
/ 16 августа 2011

Метод initWithObjects: для NSArray принимает неопределенный список аргументов:

NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:(id), ..., nil

Как я могу определить свой собственный метод, как этот?

- (void)CustomMethod:????? <= want to take infinite arguments {

}

1 Ответ

20 голосов
/ 16 августа 2011

«Бесконечные аргументы» - это переменные аргументы, и методы, которые их используют, называются методами с переменным числом аргументов.Вы определяете их так же, как ваш NSMutableArray пример. Технические вопросы и ответы Apple содержат пример того, как ее реализовать.

- (void) appendObjects:(id) firstObject, ...
{
    id eachObject;
    va_list argumentList;
    if (firstObject) // The first argument isn't part of the varargs list,
    {                                   // so we'll handle it separately.
        [self addObject: firstObject];
        va_start(argumentList, firstObject); // Start scanning for arguments after firstObject.
        while ((eachObject = va_arg(argumentList, id))) // As many times as we can get an argument of type "id"
            [self addObject: eachObject]; // that isn't nil, add it to self's contents.
        va_end(argumentList);
    }
}

Причина аргумента nil заключается в том, что вы знаете, когда достигли конца списка.Такие функции, как NSLog и printf не требуют, чтобы последний аргумент был nil, поскольку он может подсчитывать количество спецификаторов в строке формата (%d, %s и т. Д.) *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...