< pre class="snippet-code-js lang-js Prettyprint-override">
Код: Выделить всё
#import "ViewController.h"
#import
@interface Person : NSObject
@end
@implementation Person
- (void)say{
NSLog(@"Person");
}
@end
@interface Student : Person
@end
@implementation Student
- (NSString *)say {
return nil;
}
@end
@interface Doctor : Person
@end
@implementation Doctor
@end
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Student *stu =[Student new];
Doctor *dr = [Doctor new];
Person *person = [Person new];
Method studentMethod = class_getInstanceMethod([Student class], @selector(say));
Method doctorMethod = class_getInstanceMethod([Doctor class], @selector(say));
[stu say];
[dr say];
method_exchangeImplementations(studentMethod, doctorMethod);
[stu say];
[dr say];
[person say];
}
@endЯ должен упомянуть одну вещь: -say метод в классе Student. Возвращаемое значение метода Say — NSString *. Я не знаю, допустимо ли иметь переопределяющий метод, написанный с другим типом возвращаемого значения. По крайней мере, компилятор не мешал мне это сделать, возможно, он все еще считает это обычным переопределением.
Может ли кто-нибудь помочь мне избавиться от этой ошибки? ? Пожалуйста, объясните, почему компилятор также допускает переопределение с другим типом возвращаемого значения. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/342 ... cess-error
Мобильная версия