Objective-C函数有默认参数吗? [重复]

问题描述 投票:37回答:5

可能重复: Optional arguments in Objective-C 2.0? Objective-C Default Argument Value

我在Objective-C中编写了一个C函数。我想要上一个参数的默认值。

我试过了:

foo(int a, int b, int c = 0);

但那是C ++。

我也尝试过:

foo(int a, int b, int c)
{
    ...
}

foo(int a, int b)
{
   foo(a, b, 0);
}

但那也是C ++。

有没有办法在Objective-C中执行此操作?

objective-c function parameters default-value
5个回答
100
投票

ObjC中没有默认参数。

您可以创建2个方法:

-(void)fooWithA:(int)a b:(int)b c:(int)c {
  ...
}
-(void)fooWithA:(int)a b:(int)b {
  [self fooWithA:a b:b c:0];
}

对于C:使用ObjC没有为C子集添加任何特殊内容。任何无法在纯C中完成的事情都无法通过在ObjC中编译来完成。这意味着,您不能拥有默认参数,也不能重载函数。改为创建2个函数。


4
投票

不,objective-c不支持默认参数。见similar question


2
投票

1
投票

对于C函数 - 没有。对于Objective C类方法 - 是的,你只需要做两个方法,其中一个方法是一个参数short,调用另一个方法。

或者您可以将源重命名为.mm和C函数神奇地变为C ++。


1
投票

您可以使用可变长度参数列表编写C函数。您可以使用“...”作为函数声明参数之一的数据类型,以指定参数列表中变量参数列表的开始位置。 (这允许您在列表开头之前有一个或多个必需参数。)

printf()是使用此工具编写的函数示例(称为varargs)。

printf(const char *restrict format, ...);

这里,第一个参数是必需的,然后可以跟随零个或多个其他参数。

如果以这种方式编写函数,它可以为缺少的参数提供默认值。

© www.soinside.com 2019 - 2024. All rights reserved.