我们在使用苹果官方的文档的时候会发现可传不定数的参数例如:

//    [[UIAlertView alloc]initWithTitle:<#(nullable NSString *)#> message:<#(nullable NSString *)#> delegate:<#(nullable id)#> cancelButtonTitle:<#(nullable NSString *)#> otherButtonTitles:<#(nullable NSString *), ...#>, nil]
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"title" message:@"message" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"other1",@"other2",@"other3", nil ];[alert show];

这时你会发现 最后一个参数苹果会这样写 并且给你提示  ... 并以nil结尾

otherButtonTitles:<#(nullable NSString *), ...#>, nil

我们自己写的时候怎么做到这种效果的提示呢 ? 又怎么获取里面的参数呢?

如下我们自己写一个这样的方法并获取参数

- (void)viewDidLoad {[super viewDidLoad];[self testParams:@"title" addMoreParams:@"other1",@"other2", @"other3",nil];}

/*iOS实现传递不定长的多个参数的方法是使用va_list。va_list是C语言提供的处理变长参数的一种方法。在调用的时候要在参 数结尾的时候加nilva_list的使用需要注意:1.首先在函数里定义va_list型的变量,这个变量是指向参数的指针;2.然后用va_start初始化刚定义的va_list变量;3.然后用va_arg返回可变的参数,va_arg的第二个参数是你要返回的参数的类型.如果函数有多个可变参数的,依次调用va_arg获取各个参数;4.最后用va_end宏结束可变参数的获取NS_REQUIRES_NIL_TERMINATION,是一个宏,用于编译时非nil结尾的检查。 调用时要以nil结尾,否则会崩溃。*/
- (void)testParams:(NSString *)title addMoreParams:(NSString *)string, ...NS_REQUIRES_NIL_TERMINATION {NSLog(@"传多个参数的第一个参数 %@",string);//是other1//1.定义一个指向个数可变的参数列表指针;
    va_list args;//2.va_start(args, str);string为第一个参数,也就是最右边的已知参数,这里就是获取第一个可选参数的地址.使参数列表指针指向函数参数列表中的第一个可选参数,函数参数列表中参数在内存中的顺序与函数声明时的顺序是一致的。va_start(args, string);if (string){//依次取得除第一个参数以外的参数//4.va_arg(args,NSString):返回参数列表中指针所指的参数,返回类型为NSString,并使参数指针指向参数列表中下一个参数。while (va_arg(args, NSString *)){NSString *otherString = va_arg(args, NSString *);NSLog(@"otherString %@",otherString);}}//5.清空参数列表,并置参数指针args无效。
    va_end(args);}

所以



转载于:https://www.cnblogs.com/junhuawang/p/5795065.html

iOS实现传递不定长的多个参数相关推荐

  1. Python 不定长参数 *argc/**kargcs - Python零基础入门教程

    目录 一.前言 二.Python 不定长参数 argc/*kargcs 简介 1.函数不定长参数 *args 使用 2.函数不定长参数 **kwargs 使用 3.函数不定长参数*args 和**kw ...

  2. python不定长参数详解

    不定长参数 如果想要一个函数能不固定接收任意多个参数,可以使用不定长参数. 1.不定长参数两种基本形式: python自定义函数中有两种不定长参数,第一种是*XXX,在传入额外的参数时可以不用指明参数 ...

  3. C语言 函数不定长参数 ##__VA_ARGS__经典案例 - C语言零基础入门教程

    目录 一.##__VA_ARGS__简介 二.##__VA_ARGS__经典案例 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.## ...

  4. C语言 函数不定长参数 - C语言零基础入门教程

    目录 一.前言 二.函数不定长参数简介 1.va_start 2.va_arg 3.va_end 三.自定义不定长参数的函数 1.va_start/va_arg/va_end 案例一 2.va_sta ...

  5. java 不定长参数实现原理

    public static void main(String[] args) {test("a", "b", "c");}public st ...

  6. python不定长的参数*,**使用(三分钟读懂)

    不定长的参数*,** 在定义时使用的(*args,**args)和(*a,**b)意思是一样的 主要区别是*号的多少 1 在定义函数时,在形参前面加一个*,这样这个形参可以获取到所有的实参 2 它将会 ...

  7. java串口设备中断_利用DMA双缓冲或半完成中断实现串口不定长数据的接收

    在<HAL版本DMA循环模式串口数据收发>中介绍了利用DMA循环模式进行串口数据的收发,STM32F4xx的DMA还提供了双缓冲的功能,采用双缓冲模式,可以在一个DMA完成接收后,对其缓冲 ...

  8. python关键字参数必须位于位置参数之前_python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)...

    默认参数:定义函数的时候给定变量一个默认值. def num(age=1): 位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用. 关键字参数:如果定义的函数中含有关键字参数,调用函数 ...

  9. python之有关关键字参数,默认参数,不定长参数,位置参数的定义,区别,以及使用方法。

    传递任意数量的实参: 当我们无法确定函数需要接受多少个实参时,我们可以通过在形参名前加,让python创建一个名为该形参名的空元组,在函数调用时,就可以将收到的所有值放入该元组.* 举例: def m ...

最新文章

  1. 利用Eventlog Analyzer分析日志
  2. 搜索插件(django-haystack)
  3. 如何安装JHipster
  4. 理解JSON.stringify()高级用法
  5. dfs——练习demo3(20届周新杰提供)
  6. 什么是 SAP UI5 的 Element binding
  7. linux 神的编辑器,编辑器之神-vim的使用,编辑器神-vim
  8. 免密登录关闭_微信最新提醒:这个设置再不关闭,你的微信账号就能被别人“免密登录”!...
  9. activemq nodejs stomp 重连机制_5分钟优劣分析 Kafka、RabbitMQ、RocketMQ、ActiveMQ消息队列...
  10. 零基础学python书籍-0基础学python,有什么教程或者书可以推荐吗?
  11. Bat 无限弹窗(慎用)
  12. IDEA格式化SQL代码
  13. Windows 10 : 使用BCDboot恢复双系统启动
  14. EasyRecovery2022版支持电脑, 硬盘, U盘, 内存卡, 回收站等设备数据恢复
  15. 启用IIS服务(运行中输入inetmgr打不开IIS管理器的解决办法)
  16. LPC1788---串口设置
  17. SpringBoot(30) 整合PageOffice实现在线编辑Word和Excel
  18. FFmpeg开发(1)从mp4中提取aac音频
  19. 拉钩网前端项目实战02
  20. mysql的strict,MySQL Strict Mode关闭

热门文章

  1. 一个模型通杀8大视觉任务,一句话生成图像、视频、P图、视频处理...都能行 | MSRA北大出品...
  2. 浙江大学首次跻身全球50强,上海交大论文发表量全球第四 | QS最新世界大学排名...
  3. 传闻要被「降级」的这所211高校,让这位网红教授「救活了」
  4. 我从哆啦A梦的口袋里,掏出一辆充气电动车
  5. GAN和PS合体会怎样?东京大学图像增强新研究:无需配对图像,增强效果还可解释...
  6. Google X垃圾分类机器人横空出世,再也不怕分不清干垃圾湿垃圾有害垃圾了
  7. PyTorch一年增长194%,兼容性更强,超越TensorFlow指日可待
  8. 微会动微信现场互动:2019年会展和活动产业的发展趋势
  9. ORA-01034: ORACLE not available ORA-27101
  10. 用DataSet修改WebConfig