Objective-C中使用不定参数个数的方法调用

Objective-C中,定义并使用带有不定参数个数的对象方法与C函数类似,规则上也要求不定参数列表中必须至少要有一个形参,然后参数列表的最后跟省略号表示不定参数。省略号不能放在参数当中部分,只能放在末尾。

比如:

@interface MyObject : NSObject

- (void)method:(id)param1 param2:(NSNumber*)param2, ...;

@end


@implementation MyObject
- (void)method:(id)param1 param2:(NSNumber*)param2, ...
{
    va_list ap;
    
    // 定位不定形参列表(省略号部分)之前的一个形参
    va_start(ap, param2);
    
    NSMutableArray<NSNumber*> *arr = [NSMutableArray arrayWithCapacity:10];
    // 如果param2参数本身为空,则不去解析不定形参部分
    if(param2 != nil)
    {
        [arr addObject:param2];
        
        // 这里假定:如果param2不为空,则后续一定跟着至少一个不定实参
        NSNumber *num;

        // 开始迭代
        do
        {
            num = va_arg(ap, NSNumber*);
            if(num != nil)
                [arr addObject:num];
        }
        while(num != nil);
    }
    
    // 迭代结束
    va_end(ap);
    
    int sum = 0;
    for(NSNumber* num in arr)
        sum += num.intValue;
    
    NSLog(@"param1 is: %@, and the sum is: %d", param1, sum);
}

@end

// 以下是调用:
    MyObject *numObj = [[MyObject alloc] init];
    [numObj method:@"Hello" param2:nil];
    [numObj method:@"Hi" param2:@100, nil];
    [numObj method:@"Bye" param2:@200, @100, nil];
    [numObj release];

以上代码片段清晰地给出了不定参数方法的定义与调用方法。具体实现规则,各位可以根据自己当前需求来定。

你可能感兴趣的:(Objective-C中使用不定参数个数的方法调用)