是否可以调用未指定所需参数的确切数量的函数?
E.g。 我想打电话:
-(void)genFunction:(NSString *)someID {}
然后再调用它但使用不同数量的参数
-(void)genFunction:(NSString *)someID AndMore:(NSString *)anotherParam {}
我想这样做而不必为每个案例编写多个函数......
最诚挚的问候 Luben
答案 0 :(得分:3)
是
您将在标准框架中找到它们。例如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);
}
答案 1 :(得分:2)
不,在Objective C参数(或更准确地说,消息)是方法名称的一部分,Genfunction:
与GenFunction:AndMore:
无关,它们是完全不同的方法。
但是你总是可以将常用功能放在一个方法中并从其他方法中调用它。 e.g。
- (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"]);
}