据我所知,Objective-C不支持方法重载。在Objective-C中有什么替代方案呢?或者我应该总是使用不同的方法名?
发布于 2011-08-02 09:47:15
David是正确的,在Objective-C中不支持方法重载。它在这个意义上类似于PHP。正如他还指出的,以他举例的方式定义两个或更多具有不同签名的方法是一种常见的做法。但是,也可以使用"id“类型创建一个方法。通过"id“类型,您可以将任何对象(以及使用NSNumber类的任何原语)发送到该方法,然后在方法本身中,您可以测试其类型并在必要时抛出适当的异常。尽管这确实会对性能造成轻微影响,但除非您正在处理大量数据,否则它很可能是名义上的或微不足道的。
- (void) writeToFile: (NSString *)path fromObject: (id)object {
if (!([object isKindOfClass: [NSNumber class]] || [object isKindOfClass: [NSString class]])) {
@throw [NSException exceptionWithName: @"InvalidArgumentException" reason: @"Unrecognized parameter type." userInfo: nil];
}
}
这也是一个很好的实现协议来强制对象类型的地方,可以这样做:
(id<MyProtocol>)object
https://stackoverflow.com/questions/2286312
复制相似问题