情景回顧(OC篇)
在使用oc開發(fā)的時(shí)候就接觸了函數(shù)可變參數(shù)的概念,用的最多的當(dāng)然是在創(chuàng)建UIAlertView和ActionSheet時(shí)。自己也曾定義過這樣的函數(shù)。然后取參的話使用的是 c函數(shù)中的這幾個(gè)宏:
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; //定義一個(gè)指向個(gè)數(shù)可變的參數(shù)列表的指針
va_start(list, item); //得到一個(gè)可變參數(shù)的地址,第一個(gè)參數(shù)傳入列表指針,第二個(gè)參數(shù)傳入函數(shù)接收的第一個(gè)參數(shù)
int result = 0;
NSLog(@"第一個(gè)參數(shù):%d", item);
result += item;
int arg; //聲明一個(gè)中間值,用來接收遍歷可變參數(shù)列表時(shí),取出的參數(shù)
while ((arg = va_arg(list, int))) { //得到列表中的下一個(gè)參數(shù),第一個(gè)參數(shù)傳入列表指針,第二個(gè)參數(shù)為此函數(shù)可變參數(shù)的類型。
//循環(huán)的結(jié)束條件是arg不存在,即為nil
NSLog(@"當(dāng)前參數(shù):%d" , arg);
result+=arg;
}
va_end(list); //置空列表指針
return result;
}
@end
在使用此類型的函數(shù)定義時(shí)需要熟悉va_start、va_arg和va_end等宏的使用。
swift篇
在swift里對于可變參數(shù)定義和使用變成了如下這樣:
func arithmeticMean(_ numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
在傳入的參數(shù)類型后邊加上...即聲明了該參數(shù)是可變長度的,而我們在取參的時(shí)候只需要將其當(dāng)成數(shù)組去處理,這似乎比oc省心了不少。