• Objective-C中使用不定参数个数的方法调用


    Objective-C中,定义并使用带有不定参数个数的对象方法与C函数类似,规则上也要求不定参数列表中必须至少要有一个形参,然后参数列表的最后跟省略号表示不定参数。省略号不能放在参数当中部分,只能放在末尾。

    比如:

    @interface MyObject : NSObject
    
    - (void)method:(id)param1 param2:(NSNumber*)param2, ...;
    
    @end
    
    
    @implementation MyObject
    - (void)method:(id)param1 param2:(NSNumber*)param2, ...
    {
        va_list ap;
        
        // 定位不定形参列表(省略号部分)之前的一个形参
        va_start(ap, param2);
        
        NSMutableArray<NSNumber*> *arr = [NSMutableArray arrayWithCapacity:10];
        // 如果param2参数本身为空,则不去解析不定形参部分
        if(param2 != nil)
        {
            [arr addObject:param2];
            
            // 这里假定:如果param2不为空,则后续一定跟着至少一个不定实参
            NSNumber *num;
    
            // 开始迭代
            do
            {
                num = va_arg(ap, NSNumber*);
                if(num != nil)
                    [arr addObject:num];
            }
            while(num != nil);
        }
        
        // 迭代结束
        va_end(ap);
        
        int sum = 0;
        for(NSNumber* num in arr)
            sum += num.intValue;
        
        NSLog(@"param1 is: %@, and the sum is: %d", param1, sum);
    }
    
    @end
    
    // 以下是调用:
        MyObject *numObj = [[MyObject alloc] init];
        [numObj method:@"Hello" param2:nil];
        [numObj method:@"Hi" param2:@100, nil];
        [numObj method:@"Bye" param2:@200, @100, nil];
        [numObj release];

    以上代码片段清晰地给出了不定参数方法的定义与调用方法。具体实现规则,各位可以根据自己当前需求来定。

  • 相关阅读:
    Vue知识总结
    Excel使用技巧
    java框架总结
    java反射学习总结
    java虚拟机
    vue学习知识
    mysql索引知识
    前端函数定义及表格总结
    SpringMVC异常处理
    restful风格的概念
  • 原文地址:https://www.cnblogs.com/zenny-chen/p/5132200.html
Copyright © 2020-2023  润新知