В моем проекте у меня есть 3 класса, назовем их Apple, Orange и Pear.
Apple и Orange имеют свойства делегата.Они оба определяют протоколы в своем заголовочном файле, который называется AppleDelegate и OrangeDelegate.Каждый из них имеет инициализаторы с похожими сигнатурами:
- (id)initWithDelegate:(id<AppleDelegate>)delegate
- (id)initWithDelegate:(id<OrangeDelegate>)delegate
Pear реализует OrangeDelegate и определяется следующим образом:
@interface Pear : NSObject <OrangeDelegate>
Внутри Pear, я делаю этот вызов:
Orange *anOrange = [[[Orange alloc] initWithDelegate:self] autorelease];
Это приводит к предупреждению компилятора:
Class 'Pear' does not implement the 'AppleDelegate' protocol
Мне кажется, что компилятор не распознает протоколы в инициализаторах.Другими словами, он распознает эту подпись только для обоих:
- (id)initWithDelegate:(id)delegate
Потому что, когда я нажимаю «Перейти к определению» на инициализаторе в Pear, он вызывает оба класса как опции.
Есть ли способ исправить это предупреждение, кроме переименования моих методов?