Как передать переменные аргументы в другой метод?
18614 просмотра
4 ответа
Я погуглил и узнал, что, как использовать переменные аргументы. но я хочу передать свои переменные аргументы другому методу. я получаю ошибки. как это сделать ?
-(void) aMethod:(NSString *) a, ... {
[self anotherMethod:a];
// i m doing this but getting error. how to pass complete vararg to anotherMethod
}
Автор: g.revolution
Источник
Размещён: 12.11.2019 09:37
Ответы (4)
54 плюса
AFAIK ObjectiveC (так же, как C и C ++) не предоставляет вам синтаксис, который позволяет вам иметь в виду то, что вы имеете в виду.
Обычный обходной путь - создать две версии функции. Тот, который может быть вызван напрямую с помощью ..., а другой вызывается другими функциями, передавая параметры в виде va_list.
.. [obj aMethod: @ "проверить этот параметр% d", 1337); [obj anotherMethod: @ "проверить параметр% d", 666); .. - (недействительно) aMetod: (NSString *) a, ... { va_list ap; va_start (ap, a); [self anotherMethod: a withParameters: ap]; va_end (ар); } - (void) другой метод: (NSString *) a, ... { va_list ap; va_start (ap, a); [self anotherMethod: a withParameters: ap]; va_end (ар); } - (void) anotherMethod: (NSString *) a с параметрами: (va_list) valist { NSLog ([[[NSString alloc] initWithFormat: arguments: valist] autorelease]); }Автор: Till Размещён: 06.03.2010 08:31
20 плюса
Вы не можете передавать переменные аргументы напрямую. Но некоторые из этих методов предоставляют альтернативу, которую вы можете передать va_list
аргумент, например
#include <stdarg.h>
-(void)printFormat:(NSString*)format, ... {
// Won't work:
// NSString* str = [NSString stringWithFormat:format];
va_list vl;
va_start(vl, format);
NSString* str = [[[NSString alloc] initWithFormat:format arguments:vl] autorelease];
va_end(vl);
printf("%s", [str UTF8String]);
}
Автор: kennytm
Размещён: 06.03.2010 08:31
1 плюс
Рассматривали ли вы настройку аргументов в массиве или словаре и условное кодирование?
-(void) aMethodWithArguments:(NSArray *)arguments {
for (id *object in arguments) {
if ([object isKindOfClass:fooClass]) {
//handler for objects that are foo
[self anotherMethod:object];
}
if ([object isKindOfClass:barClass]) {
//and so on...
[self yetAnotherMethod:object];
}
}
}
Автор: Justin
Размещён: 29.10.2010 05:06
0 плюса
Я думаю, что вы могли бы использовать макросы для достижения того же. Допустим, вы хотите передать аргументы переменной aMethod другому
-(void) aMethod:(NSString *) a, ... {
}
Вы можете определить свой другой «метод», используя макрос, хотя это не настоящий метод:
#define anotherMethod(_a_,...) [self aMethod:_a_,##__VA_ARGS__]
Это моё решение.
Автор: Jidong Chen Размещён: 23.08.2017 08:40Вопросы из категории :
- iphone Как мне дать моим веб-сайтам значок для iPhone?
- iphone iPhone веб-приложения, шаблоны, рамки?
- iphone Приложение для iPhone, которое получает доступ к структуре Core Location через Интернет
- iphone Tips for a successful AppStore submission?
- iphone Могу ли я написать нативные приложения для iPhone с использованием Python
- ios Приложение для iPhone в ландшафтном режиме, системы 2008
- ios Как программно отправить смс на айфон?
- ios Как я могу разработать для iPhone, используя машину для разработки Windows?
- objective-c Открытие нестандартного URL в приложении Какао
- objective-c Каков наилучший способ перетащить NSMutableArray?
- objective-c Как работает пул автозапуска NSAutoreleasePool?
- variadic-functions Что ** (двойная звезда / звездочка) и * (звездочка / звездочка) делают для параметров?
- variadic-functions Есть ли ошибки, использующие varargs с опорными параметрами
- variadic-functions Когда вы используете Varargs в Java?
- variadic-functions Как я могу преобразовать объект «arguments» в массив в JavaScript?
- variadic-functions Как передать переменное число аргументов в printf / sprintf