方法在目标C中超载?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

据我所知,目标C不支持过载方法。在目标C中,有什么可以替代的?还是应该总是使用不同的方法名称?

提问于
用户回答回答于

正确,Object-C不支持方法重载,所以必须使用不同的方法名称。

但是,请注意,“方法名称”包括方法签名关键字(“:”s之前的参数名称),因此下面是两个异类方法,尽管它们都开始于“writeToFile”:

-(void) writeToFile:(NSString *)path fromInt:(int)anInt;
-(void) writeToFile:(NSString *)path fromString:(NSString *)aString;

(这两个方法的名称是“writeToFile:From Int:”和“writeToFile:from String:”)。

用户回答回答于

值得一提的是,即使目标C不支持方法重载,Clang+LLVM支持功能重载C,虽然不是所要的,

下面是一个关于函数重载工作方式的简单示例:

__attribute__((overloadable)) float area(Circle * this)
{
    return M_PI*this.radius*this.radius;
}

__attribute__((overloadable)) float area(Rectangle * this)
{
    return this.w*this.h;
}

//...
//In your Obj-C methods you can call:
NSLog(@"%f %f", area(rect), area(circle));

扫码关注云+社区