美文网首页
Objective-C可变参数

Objective-C可变参数

作者: 哈哈哈我的简书账号 | 来源:发表于2017-01-23 15:07 被阅读50次

    可变参数的函数在Objective-C中不罕见,像Cocoa中的很多常见的函数都是可变参数的,如:

    NSLog(NSString*format, ...)

    + (id)arrayWithObjects:(id)firstObj, ...

    + (id)dictionaryWithObjectsAndKeys:(id)firstObject , ...

    那我们如何实现自己的变参函数呢,其实我们需要用到C语言中关于变参的一组宏:va_start,va_arg,va_end,以下示例是一个变参函数的实现:

    - (void)method:(NSString*)value,...

    {

    //指向变参的指针

    va_list list

    //使用第一个参数来初使化list指针

    va_start(list, value);

    NSString*string = nil;

    while((string = va_arg(list,NSString*)))

    {

    //返回可变参数,va_arg第二个参数为可变参数类型,如果有多个可变参数,依次调用可获取各个参数


                   NSLog(@"%@",string);

    }

    //结束可变参数的获取

     va_end(list);

    }

    函数调用:[self method:@”1”,@”2”,@”3”,nil];像大多数变参函数一样,未尾一定要加上nil,因为这一组宏都没有提供对参数个数的检测,当然你可以会问为何NSLog的参数中我们都不用在末尾添加nil的参数呢,那是因为NSLog的第一个参数是一个格式化字符串,通过这个字条串就能获得后面的参数个数,所以如果你的函数还能有其它的参数能够显式的指出变参个数,当然你也可以书写(但在函数体中需要修改为按已知个数调用va_arg),但是我仍然推荐以上的写法!

    相关文章

      网友评论

          本文标题:Objective-C可变参数

          本文链接:https://www.haomeiwen.com/subject/uayabttx.html