Emp*_*ack 7 java oop iphone objective-c ios
我对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
Run Code Online (Sandbox Code Playgroud)
为什么Objective-C不支持这个?有替代方案吗?
Mic*_*yan 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;
Run Code Online (Sandbox Code Playgroud)
从这开始:
- (int)add:(int)i and:(int)j;
Run Code Online (Sandbox Code Playgroud)
这不会覆盖任何东西 - 它只是另一种方法:
- (int)add:(int)i and:(int)j and:(int)k; // Accepted
Run Code Online (Sandbox Code Playgroud)
以下内容未被特别接受,因为Objective-C不允许共变或反变 方法声明.Objective-C也没有基于类型的调度重载Java和C++.
- (float)add:(float)i and:(float)j; // Throws error
Run Code Online (Sandbox Code Playgroud)
请注意,Java是直接从Objective-C派生的.
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |