Я не смог найти ничего конкретного в документации Apple.
Вот сценарий.
Класс Objective-C:
@implementation Superclass
- (instancetype)init {
self = [super init];
[self doSomething];
return self;
}
- (void)doSomething {
NSLog(@"\ndoSomething called from Superclass\n");
}
@end
Swift подкласс:
class Subclass: Superclass {
override init() {
super.init()
doSomething()
}
@objc func doSomething() {
print("\n\ndoSomething called from Subclass\n")
}
}
Использование @objc
в сигнатуре метода doSomething
в подклассе приводит к тому, что метод в суперклассе никогда не вызывается, т. Е. Только doSomething called from Subclass
выводится на консоль.
Удаление @objc
устраняет проблему.
Почему это?