3 ответов:
правильно, objective-C не поддерживает перегрузку метода, поэтому вам нужно использовать разные имена методов.
обратите внимание, однако, что "имя метода" включает ключевые слова подписи метода (параметр имена, которые приходят перед": "s), так что следующие два разные методы, хотя они оба начинают "writeToFile":
-(void) writeToFile:(NSString *)path fromInt:(int)anInt; -(void) writeToFile:(NSString *)path fromString:(NSString *)aString;(имена двух методов: "writeToFile: fromInt:" и "writeToFile: fromString:").
возможно, стоит упомянуть, что даже если Objective-C не поддерживает метод перегрузка, Clang + LLVM поддерживает функции перегрузка для С. Хотя не совсем то, что вы ищете, это может оказаться полезным в некоторых ситуациях (например, при реализации немного взломан (идет против инкапсуляции) версия на шаблон дизайна посетителя)
вот простой пример перегрузки функции работает:
__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));
Дэвид прав в том, что перегрузка метода не поддерживается в 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
Comments