可变参数函数

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 的可变参数可以是 任意位置的,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容