• iOS学习笔记(5)形参个数可变的方法


      如果在定义方法时,在最后一个形参明后增加逗号和三点(,...),则表明该形参可以接受多个参数值。

      为了在程序中获取个数可变的形参,需要使用如下关键字

       · va_list:这是一个类型,用于定义指向可变参数列表的指针变量

       · va_start:这是一个函数,该函数指定开始处理可变形参的列表,并让指针变量指向可变形参列表的第一个参数

       · va_end:结束处理可变形参,释放指针变量

       · va_arg:该函数返回获取指针当前指向的参数的值,并将指针移动到指向下一个参数

      例子

      Varargs.h

    #import <Foundation/Foundation.h>
    
    @interface Varargs : NSObject
    
    //定义形参个数可变的方法
    -(void)test:(NSString *)name,...;
    
    @end

      Varargs.m

    #import "Varargs.h"
    
    @implementation Varargs
    -(void)test:(NSString *)name,...
    {
        // 使用va_list定义一个argList指针变量,该指针变量指向可变参数列表
        va_list argList;
        // 如果为第一个name参数存在,才需要处理后面的参数
        if (name)
        {
            // 由于name参数并不在可变参数列表中,因此先处理name参数
            NSLog(@"%@" , name);
            // 让argList指向第一个可变参数列表的第一个参数,开始提取可变参数列表的参数
            va_start(argList, name);
            // va_arg用于提取argList指针当前指向的参数,并将指针移动到指向下一个参数
            // arg变量用于保存当前获取的参数,如果该参数不为nil,进入循环体
            NSString* arg = va_arg(argList, id);
            while (arg)
            {
                // 打印出每一个参数.
                NSLog(@"%@",arg);
                // 再次提取下一个参数,并将指针移动到指向下一个参数
                arg = va_arg(argList, id);
            }
            // 释放argList指针,结束提取
            va_end(argList);
        }
    }
    @end

      main函数 

    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            Varargs* va = [[Varargs alloc] init];
            [va test:@"疯狂iOS讲义"
             , @"疯狂Android讲义", @"疯狂Ajax讲义" , nil];
        }
        return 0;
    }

       注意:个数可变的形参只能处于形参列表的最后。一个方法中最多之恩给你保吉安一个长度可变的形参。

    引自《疯狂iOS讲义(上)》

  • 相关阅读:
    弹丸类以及魂类的构想
    LaunchCharacter
    如何让Ue4画面产生振动效果
    解决Ue4C++使用UMG之类的模块时出现的拼写错误
    我认为我可以去尝试做一下Maya Ue4导出插件
    Wiki上的Ue4文件结构以及命名规范
    如何在修改了默认值之后跟新
    Ue4 BatteryCollector 教程笔记
    Ue4的GitHUB版本版本管理探索
    FString的相关文档,另外还有4种LOG的方法
  • 原文地址:https://www.cnblogs.com/shuguang-poxiap/p/3850446.html
Copyright © 2020-2023  润新知