OC 中不固定参数函数, 最后一个参数后面的类型都是和最后那个参数的类型相同
//这个方法中的,就是使用了不固定参数
NSString *str = [NSString stringWithFormat:(nonnull NSString *), ...];
//不固定参数的方法定义
- (void)method:(id)param1 param2:(NSNumber*)param2,...;
//不固定参数的方法实现
- (void)method:(id)param1 param2:(NSNumber*)param2,...{
va_listap;
va_start(ap, param2);
//定义一个参数数组
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:10];
//如果param2参数本身为空,则不去解析不定形参数部分
if(param2 !=nil) {
[arr addObject:param2];
NSNumber*num;
do{
num =va_arg(ap,NSNumber*);
if(num !=nil){
[arr addObject:num];
}
}while(num !=nil);
}
va_end(ap);
//数组中已经添加了所有不定性参数,也可能是空数组
// ...
}
Swift 更加简单
在方法中被当做数组来处理
//可变参数的方法
func sum(input:Int...) ->Int{
return input.reduce(0, +)
// return input.reduce(0, { (result, anotherValue) -> Int in
// return result - anotherValue;
// })
}
print(sum(input:1,2,3,4,5))// 15
限制还是有的,
和 oc 一样, 只能有一个参数是个数可变类型的, 并且类型是一样的
但是 swift 可以不像 oc 那样可变参数必须是最后一个参数,
swift 的可变参数可以是 任意位置的,