[IOS 开发] OC 定义一个方法,参数数量可变.

来源:互联网 发布:mysql 外键设置 编辑:程序博客网 时间:2024/06/10 09:26


在工作的需求中,需要传多个参数,参数的个数不是固定的.

当然我们可以传一个数组.

今天和大家介绍用另一个方法来解决这个问题.


#define  FORMATFUN(...)  [self actionUsePic:__VA_ARGS__]- (NSString *)actionUsePic:(NSString *)actionNum, ... {    NSMutableString *argsArray = [[NSMutableString alloc]init];    va_list params; //定义一个指向个数可变的参数列表指针;    va_start(params,actionNum);//va_start 得到第一个可变参数地址,    id arg;    if (actionNum)    {        //将第一个参数添加到array        NSString *prev = actionNum;                [argsArray appendString:prev];                //va_arg 指向下一个参数地址        //这里是问题的所在 网上的例子,没有保存第一个参数地址,后边循环,指针将不会在指向第一个参数        while( (arg = va_arg(params,id)) )        {            if ( arg )            {                [argsArray appendString:arg];            }        }        //置空        va_end(params);    }    return argsArray;}

调用并打印

NSString *i = FORMATFUN(@"1",@"2",@"3",@"4",nil);NSLog(@" i = %@", i);

打印结果:    i = 1234

0 0
原创粉丝点击