[IOS 开发] OC 定义一个方法,参数数量可变.
2015-10-12 14:03
501 查看
在工作的需求中,需要传多个参数,参数的个数不是固定的.
当然我们可以传一个数组.
今天和大家介绍用另一个方法来解决这个问题.
#define FORMATFUN(...) [self actionUsePic:__VA_ARGS__]
- (NSString *)actionUsePic:(NSString *)actionNum, ... {
NSMutableString *argsArray = [[NSMutableString alloc]init];
va_list params; //定义一个指向个数可变的参数列表指针;
va_start(params,actionNum);//va_start 得到第一个可变参数地址,
id arg;
if (actionNum)
{
//将第一个参数添加到array
NSString *prev = actionNum;
[argsArray appendString:prev];
//va_arg 指向下一个参数地址
//这里是问题的所在 网上的例子,没有保存第一个参数地址,后边循环,指针将不会在指向第一个参数
while( (arg = va_arg(params,id)) )
{
if ( arg )
{
[argsArray appendString:arg];
}
}
//置空
va_end(params);
}
return argsArray;
}
调用并打印
NSString *i = FORMATFUN(@"1",@"2",@"3",@"4",nil);
NSLog(@" i = %@", i);
打印结果: i = 1234
当然我们可以传一个数组.
今天和大家介绍用另一个方法来解决这个问题.
#define FORMATFUN(...) [self actionUsePic:__VA_ARGS__]
- (NSString *)actionUsePic:(NSString *)actionNum, ... {
NSMutableString *argsArray = [[NSMutableString alloc]init];
va_list params; //定义一个指向个数可变的参数列表指针;
va_start(params,actionNum);//va_start 得到第一个可变参数地址,
id arg;
if (actionNum)
{
//将第一个参数添加到array
NSString *prev = actionNum;
[argsArray appendString:prev];
//va_arg 指向下一个参数地址
//这里是问题的所在 网上的例子,没有保存第一个参数地址,后边循环,指针将不会在指向第一个参数
while( (arg = va_arg(params,id)) )
{
if ( arg )
{
[argsArray appendString:arg];
}
}
//置空
va_end(params);
}
return argsArray;
}
调用并打印
NSString *i = FORMATFUN(@"1",@"2",@"3",@"4",nil);
NSLog(@" i = %@", i);
打印结果: i = 1234
相关文章推荐
- IOS9之后适配需要注意的问题
- iOS9适配系列教程
- iOS开发——视频播放
- iOS判断输入的字符串是否是纯数字
- iOS开发XCODE5 SVN配置 使用办法
- iOS生成静态库方法-iOS集成静态库-iOS合并静态库
- 获取iOS设备的唯一标识
- iOS --倒计时
- ios7自定义返回按钮后,右滑返回功能失效解决方法
- iOS获取设备类型
- IOS开发中的几种设计模式介绍
- ios基础学习
- iOS ---属性传值--正向界面传值
- Xcode7开发下 MJRefresh (2.4.12)版本下的使用 问题
- iOS ---利用文本框的协议判断是否输入内容
- iOS ---监听文本框输入
- IOS 页面传值的方法
- IOS使用XMPP最新教程(五)添加好友和接受好友请求
- ios归档
- iOS---TextField知多少