zoukankan      html  css  js  c++  java
  • 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];

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

  • 相关阅读:
    Codeforces Round #462 (Div. 2)
    Codeforces 934.D A Determined Cleanup
    Codeforces 934.C A Twisty Movement
    Codeforces 934.B A Prosperous Lot
    event和window.event
    javascript事件捕获与冒泡
    Dom兼容问题记录汇总
    流媒体网站开发技术浅谈
    javascript:自定义事件初探
    jQuery插件教程
  • 原文地址:https://www.cnblogs.com/zenny-chen/p/5132200.html
Copyright © 2011-2022 走看看