swift中函数可变参数的使用

情景回顾(OC篇)
在使用oc开发的时候就接触了函数可变参数的概念,用的最多的当然是在创建UIAlertView和ActionSheet时。自己也曾定义过这样的函数。然后取参的话使用的是 c函数中的这几个宏:

void va_start(va_list arg_ptr, prev_param);
void va_arg(va_list arg_ptr, type);
void va_end(va_list arg_ptr);

使用过程如下:

-(int)add:(int)item, ...
{
    va_list list; //定义一个指向个数可变的参数列表的指针
    va_start(list, item); //得到一个可变参数的地址,第一个参数传入列表指针,第二个参数传入函数接收的第一个参数
    int result = 0;
    NSLog(@"第一个参数:%d", item);
    result += item;
    int arg; //声明一个中间值,用来接收遍历可变参数列表时,取出的参数
    while ((arg = va_arg(list, int))) { //得到列表中的下一个参数,第一个参数传入列表指针,第二个参数为此函数可变参数的类型。
        //循环的结束条件是arg不存在,即为nil
        NSLog(@"当前参数:%d" , arg);
        result+=arg;
    }
    va_end(list); //置空列表指针
    return result;
}
@end

在使用此类型的函数定义时需要熟悉va_start、va_arg和va_end等宏的使用。


swift篇
在swift里对于可变参数定义和使用变成了如下这样:

func arithmeticMean(_ numbers: Double...) -> Double {
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total / Double(numbers.count)
}

在传入的参数类型后边加上...即声明了该参数是可变长度的,而我们在取参的时候只需要将其当成数组去处理,这似乎比oc省心了不少。

你可能感兴趣的:(swift中函数可变参数的使用)