Objective-C方法重载

7

我对Objective-C的方法重载有疑问。Java支持使用相同名称、不同类型但参数数量相同的方法重载。但是当我尝试在Objective-C中进行类似的声明时,它会抛出“方法重复声明”的错误。请看下面的代码:

/* Java */

int add(int i, int j);
int add(int i, int j, int k); // Accepted
float add(float i, float j); // Accepted

/* Objective-C */

- (int)add:(int)i and:(int)j;
- (int)add:(int)i and:(int)j and:(int)k; // Accepted
- (float)add:(float)i and:(float)j; // Throws error

为什么Objective-C不支持这个?有没有替代方案?

我对Objective-C中的方法重载也有疑问。我非常确定它不存在。 - JeremyP
你确定不是因为你写成了“flat”而不是“float”? :P :P - hauntsaninja
2个回答

15

在Objective-C中不支持方法重载。在普通的C语言中也不支持,因此Objective-C同样没有添加方法重载并不令人惊讶。为了清晰明了,有时候这是好的。通常的解决方法是在函数名中包含一些参数信息。例如:

- (int) addInt:(int)i toInt:(int)j;
- (int) addInt:(int)i toInt:(int)j andInt:(int)k;
- (float) addFloat:(float)i toFloat:(float)j;

6

从这里开始:

- (int)add:(int)i and:(int)j;

这并不会覆盖任何内容 - 它只是另一种方法:

- (int)add:(int)i and:(int)j and:(int)k; // Accepted

以下代码不被接受,因为Objective-C不允许协变逆变方法声明。同时,Objective-C也不像Java和C++那样基于类型自动派发重载函数。

- (float)add:(float)i and:(float)j; // Throws error

请注意,Java是直接从Objective-C衍生出来的。

Objective-C不允许协变或逆变方法声明。 - EmptyStack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接