swift中函数可变参数的使用

/ Mac / 没有评论 / 1282浏览

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省心了不少。