Objective-C中可选参数的实现
来源:互联网 发布:晋江腾达陶瓷销售网络 编辑:程序博客网 时间:2024/06/12 23:19
Objective-C中可选参数的API也表多,例如:
- (instancetype)initWithFormat:(NSString *)format, ...;
- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id /*<UIAlertViewDelegate>*/)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...;我们有时候也需要写一些可变参数,例如网络请求传可变的参数,数据库操作时进行可变参数的查询等等。
定义一个Man类,有个方法是做一顿丰盛的大餐。
//初始化并且定义方法@interface Man : NSObject- (NSString *)makeMilk:(NSString *)milk fruit:(NSString *)fruit food:(NSString *)food, ...;@end
可变参数的语法是,前面是定参,最后一个是可变参数,可变参数的类型是一致的,最后以逗号和省略号结尾。
这个方法有两个参数(milk和fruit)是固定的,后面的food是可长可短的,具体根据情况确定。- (NSString *)makeMilk:(NSString *)milk fruit:(NSString *)fruit food:(NSString *)food, ...;{ NSMutableArray *arr = [[NSMutableArray alloc] init]; va_list params; //定义一个指向个数可变的参数列表指针; id argument; if (food) { //使参数列表指针arg_ptr指向函数参数列表中的第一个可选参数,说明:argN是位于第一个可选参数之前的固定参数,(或者说,最后一个 固定参数;…之前的一个参数),函数参数列表中参数在内存中的顺序与函数声明时的顺序是一致的。如果有一va函数的声明是void va_test(char a, char b, char c, …),则它的固定参数依次是a,b,c,最后一个固定参数argN为c,因此就是va_start(arg_ptr, c)。 va_start(params, food); while ((argument = va_arg(params, id))) {//返回参数列表中指针arg_ptr所指的参数,返回类型为type,并使指针arg_ptr指向参数列表中下一个参数 [arr addObject:argument]; } va_end(params);//释放列表指针 } return [NSString stringWithFormat:@"%@_%@_%@",milk,fruit,[arr componentsJoinedByString:@"_"]];}使用时:
Man *man = [[Man alloc] init];[man makeMilk:@"马奶" fruit:@"苹果" food:@"鱼儿",@"肉儿",@"鸡儿",@"鸭儿",@"鹅儿",nil];//马奶_苹果_肉儿_鸡儿_鸭儿_鹅儿
0 0
- Objective-C中可选参数的实现
- Objective-C中实现变长参数问题
- 在Swift中,如何像Objective-C定义可选接口?
- C和C++中处理个数可变的可选参数的函数和宏
- Objective-C中trim的实现
- objective-c中category的底层实现
- 函数的可选参数
- Java的可选参数
- objective-c 中定义多参数的方法
- OBJECTIVE-C中nsstring的writetofile atomically参数解释
- Objective-c中@property声明时的参数释疑01
- Objective-c中@property声明时的参数释疑02
- OBJECTIVE-C中nsstring的writetofile atomically参数解释
- Objective-c中@property声明时的参数释疑
- OBJECTIVE-C中nsstring的writetofile atomically参数解释
- Objective-c 中输出型参数的写法
- OBJECTIVE-C中nsstring的writetofile atomically参数解释
- OBJECTIVE-C中NSString的writeToFile atomically参数解释
- 第十六周项目 4 为动态数组扩容
- 第十六周项目二——用指针玩字符串(1,字符串str1和str2的连接)
- LDA: 从头到尾彻底理解LDA (Latent Dirichlet Allocation)
- 黑马程序员_Java基础_网络编程相关小项目
- 一个能并列高亮显示文件比较结果的小工具 icdiff
- Objective-C中可选参数的实现
- 第十六周 项目二--用指针玩字符串(2.2.1去除字符串中特定字符---数组名作形参)
- 控制寄存器(CR0,CR1,CR2,CR3)
- 学习从历史开始
- 使用MyEclipse开发Web项目
- JDK在MAC OS X下的路径设置
- rman删除归档日志
- 第十六周项目二——用指针玩字符串(2.去除字符串str中的特定字符c)
- OpenCV学习笔记一 例程