美文网首页我收录的代码iOS 开发 iOS点点滴滴
iOS可变参数(不定参数)的用法

iOS可变参数(不定参数)的用法

作者: lancely | 来源:发表于2016-06-22 15:15 被阅读2747次

简介

一个可变参数函数是指一个函数拥有不定的参数,即为一个函数可接收多个参数。有时我们会遇到一些算术问题需要用到,比如是计算传入参数的总和,字符串的连接或是其它操作过程,我们在 OC 里也经常使用,最经典的就是 NSLog( C 为 printf ) ,它可以指定格式的输出,格式化输出的内容。

举个栗子🌰

新建一个类TestClass,写一个类方法print:用于输出我们传入的值

类头文件TestClass.h

#import <Foundation/Foundation.h>

@interface TestClass : NSObject
+ (void)print:(NSString *)firstArg, ... NS_REQUIRES_NIL_TERMINATION;
@end

类实现TestClass.m

#import "TestClass.h"

@implementation TestClass

+ (void)print:(NSString *)firstArg, ... NS_REQUIRES_NIL_TERMINATION {
    if (firstArg) {
        // 取出第一个参数
        NSLog(@"%@", firstArg);
        // 定义一个指向个数可变的参数列表指针;
        va_list args;
        // 用于存放取出的参数
        NSString *arg;
        // 初始化变量刚定义的va_list变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数
        va_start(args, firstArg);
        // 遍历全部参数 va_arg返回可变的参数(a_arg的第二个参数是你要返回的参数的类型)
        while ((arg = va_arg(args, NSString *))) {
            NSLog(@"%@", arg);
        }
        // 清空参数列表,并置参数指针args无效
        va_end(args);
    }
}

@end

va_list:用来保存宏 va_start 、va_arg 和 va_end 所需信息的一种类型。为了访问变长参数列表中的参数,必须声明 va_list 类型的一个对象。

va_start:访问变长参数列表中的参数之前使用的宏,它初始化用va_list声明的对象,初始化结果供宏va_arg和va_end使用;

va_arg:展开成一个表达式的宏,该表达式具有变长参数列表中下一个参数的值和类型。每次调用 va_arg 都会修改,用 va_list 声明的对象从而使该对象指向参数列表中的下一个参数。

va_end:该宏使程序能够从变长参数列表用宏 va_start 引用的函数中正常返回。

NS_REQUIRES_NIL_TERMINATION :是一个宏,用于编译时非nil结尾的检查。

试一试

在外部调用一个刚刚写的方法

注意:

  • 在可变参数里,所有参数均用逗号隔开
  • 参数结尾必须加上nil,表示参数结束
#import <Foundation/Foundation.h>
#import "TestClass.h"

int main(int argc, const char * argv[]) {
    [TestClass print:@"a", @"b", @"c", nil];
    return 0;
}

看一下执行的结果,输出了我们预期的值

执行结果

参考:ios开发-Object-C可变参数函数

相关文章

  • iOS可变参数(不定参数)的用法

    简介 一个可变参数函数是指一个函数拥有不定的参数,即为一个函数可接收多个参数。有时我们会遇到一些算术问题需要用到,...

  • 22.可变参数

    可变参数的用法

  • iOS可变参数实现及原理剖析

    iOS可变参数实现及原理剖析 标签(空格分隔): iOS可变参数 iOS方法后面为什么有nil参数 你一定会时常见...

  • iOS中可变参数个数方法

    一个可变参数函数是指一个函数拥有不定的参数,即为一个函数可接收多个参数。 在iOS中比较常见的比如NSArray中...

  • 基础:OC方法定义可变参数

    可变参数函数是指定义的函数可以拥有不定个数的参数,函数可以接收多个参数。以下是OC中常用的系统定义的可变参数函数:...

  • 可变参数的用法

    初学python过程中遇到了*arg和**kwargs这些关键字,经过网搜理解了他们的用法 1.可以让你在func...

  • 4.3 创建拥有任意数量参数的函数 [Swift教程]

    1. 本节课将为你讲解可变参数的用法 。一个作为可变参数的参数,可以接受零个或多个指定类型的值。 2. 创建可变的...

  • C/C++可变参数

    C/C++中支持传递可变参数,即不定参数,例如: 那么如何拿到不定参数,需要借助va_list类型,包含在cstd...

  • 函数与数组

    函数的传参 可变参(不定参)arguments 参数的个数可变,参数数组 1.增加(改变数组内容) push() ...

  • 可变参数

    简介 一个可变参数的函数是指该函数拥有不定的参数,参数个数可能为0个,1个或者多个。在OC中常见的系统可变参数函数...

网友评论

  • 哈哈哈士奇XHB:有个问题就是,这句代码arg = va_arg(args, NSString *),不可变参数的类型如果不固定,你怎么去获取这些的类型?
    lancely:可以参考 Masonry 的 MASBoxValue 宏实现

本文标题:iOS可变参数(不定参数)的用法

本文链接:https://www.haomeiwen.com/subject/icvudttx.html