zoukankan      html  css  js  c++  java
  • 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讲义(上)》

  • 相关阅读:
    docker工具链概述
    Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (二)
    Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (一)
    阿贝云免费虚拟主机使用体验
    Topshelf 秒建 Windows 服务
    一次兼职项目开发的经历
    修改了my.ini没有效果,MySql的字符集还是没有变成utf8——mysql中文乱码
    【转载】Fiddler工具使用介绍(一)
    C#中$的用法
    系统开发常用模块
  • 原文地址:https://www.cnblogs.com/shuguang-poxiap/p/3850446.html
Copyright © 2011-2022 走看看