Вызов функции с переменным количеством параметров в Задаче C - PullRequest
1 голос
/ 25 марта 2011

Можно ли вызвать функцию, в которой не указано точное количество требуемых параметров?

например. Я хочу позвонить:

-(void)genFunction:(NSString *)someID {}

, а затем вызовите его снова, но с другим количеством параметров

-(void)genFunction:(NSString *)someID AndMore:(NSString *)anotherParam {}

Я хочу сделать это без необходимости писать несколько функций для каждого случая ...

С наилучшими пожеланиями Любен

Ответы [ 2 ]

3 голосов
/ 25 марта 2011

Да.

Вы найдете их в стандартных рамках. Например, NSArray имеет метод:

- (id)initWithObjects:(id)firstObj, ...

... указывает, что метод принимает переменное число аргументов.

Чтобы написать свои собственные вариационные методы, вам нужно использовать стандартные вариационные функции C, см. stdarg в документации. Схема выглядит следующим образом:

+ (void) msgWithFormat:(NSString *)format, ...
{
    va_list args;
    va_start(args, format);
    // use the va_arg() function to access the arguments - see docs for stdarg
    va_end(args);
}

Это прямо аналогично эквиваленту C:

void DebugLog_Msg(const char *format, ...)
{
    va_list args;
    va_start(args, format);
    // use the va_arg() function to access the arguments - see docs for stdarg
    va_end(args);
}
2 голосов
/ 25 марта 2011

Нет, в Objective C параметры (или, точнее, сообщения) являются частью имени метода, Genfunction: не относится к GenFunction:AndMore:, это совершенно разные методы.

Но вы всегда можетеобъедините общую функциональность в одном методе и вызовите его из других.например,

- (void)genMethodByID:(NSString *)newID {
    // Your totally awesome special case.
    [self genMethod];
}

- (void)genMethodByDate:(NSDate *)newDate {
    // Your totally awesome special case.
    [self genMethod];
}

- (void)genMethod {
    // Your totally awesome common code.
}

Или просто отправить параметры внутри NSDictionary.

- (void)genMethodWithParameters:(NSDictionary *)newDictionary {
    NSLog(@"I can haz ID: %@", [newDictionary objectForKey:@"newID"]);
    NSLog(@"I can haz date: %@", [newDictionary objectForKey:@"newDate"]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...