【问题标题】:Variable number of method parameters in Objective C - Need an exampleObjective C中可变数量的方法参数 - 需要一个例子
【发布时间】:2012-09-17 06:56:45
【问题描述】:

来自Objective C Programming Guide(在“对象消息传递”部分下),

采用可变数量参数的方法也是可能的, 尽管它们有些罕见。额外参数用逗号分隔 在方法名称的末尾。 (与冒号不同,逗号不是 被认为是名称的一部分。)在以下示例中,虚构的 makeGroup: 方法传递一个必需参数(组)和三个 可选参数:

[接收者makeGroup:group, memberOne, memberTwo, memberThree];

我尝试创建这样的方法,但它显示错误

“预期为 ';'方法原型之后”

当我尝试在我的接口文件(.h 文件)中声明以下函数时。

- (void) printMyClass: (int) x, (int) y, (int) z;

谁能举个例子来创建像makeGroup这样的方法

谢谢

【问题讨论】:

标签: objective-c parameters optional-parameters


【解决方案1】:

你可以看到这个link

在你的头文件中定义最后三个点的方法

-(void)yourMethods:(id)string1,...;

然后在你的实现文件中写入方法体

-(void)yourMethods:(id)string1, ...{

    NSMutableArray *arguments=[[NSMutableArray alloc]initWithArray:nil];
    id eachObject;
    va_list argumentList;
    if (string1) 
    {
        [arguments addObject: string1];
        va_start(argumentList, string1); 
        while ((eachObject = va_arg(argumentList, id)))    
        {
             [arguments addObject: eachObject];
        }
        va_end(argumentList);        
     }
    NSLog(@"%@",arguments);
}

现在调用你的方法

[self yourMethods:@"ab",@"cd",@"ef",@"gf",nil];

注意:记得把 nil 放在最后

【讨论】:

  • 感谢您的回答。那么,我应该使用“NSMutableArray”来实现方法中的多个参数吗?
  • 抱歉,我不太理解您的问题。你想在哪里使用可变数组,在调用方法时或在方法体内部?...你可以看到上面的链接已经完成了说明
  • 对不起.. 我有点困惑。那么yourMethods方法和methodWithVariableParameters方法是一样的吗?
  • 如果参数不是那种 id 怎么办?例如一个 BOOL: '[self yourMethods:@"ab", 1,nil];'请帮帮我..
  • 感谢您的回答。但是如果我想在另一个方法中调用这个方法,该方法也接受可变数量的方法参数,并且需要将这些参数传递给被调用的方法,我该怎么办?
【解决方案2】:

用可变数量的参数声明方法的语法如下:

- (void) printMyClass: (int) x, ...;

一个参数始终是所需的最小值,其他参数可以通过va_arg 函数组访问。详情请见this tutorial

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多