Не удается найти объявление протокола для UIViewController при создании протокола - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь определить свой протокол так, чтобы класс, реализующий его, также был UIViewController.

Итак, я ввел следующий код в заголовочный файл:

#import <UIKit/UIKit.h>
#import <UIKit/UIViewController.h>
#import <EventKit/EventKit.h>
#import <EventKitUI/EventKitUI.h>

@protocol MySuperProtocol<UIViewController> // <-- here

@property(nonatomic, weak, nullable) id<EKEventViewDelegate> delegate;

@end

Я всегда получаю сообщение об ошибке:

Не удалось найти объявление протокола для 'UIViewController'

Если я заменю UIViewController на NSObject, код компилируется. Если после протокола удалить наследство <>, код скомпилируется.

Я перепробовал все комбинации

#import <UIKit/UIKit.h>
#import <UIKit/UIViewController.h>

безрезультатно.

Что я делаю не так?

1 Ответ

1 голос
/ 25 марта 2019

Вы неправильно понимаете синтаксис.@protocol MySuperProtocol<UIViewController> не устанавливает ограничение, согласно которому реализации MySuperProtocol должны быть UIViewController s.В нем говорится, что MySuperProtocol соответствует UIViewController

Однако, в отличие от NSObject, UIViewController не является протоколом;это класс.Протокол не может соответствовать классу, только другому протоколу.

Вы можете обратиться к документации:

Протоколы наследуются от других протоколов

Точно так же, как класс Objective C может наследовать от суперкласса, вы также можете указать, что один протокол соответствует другому.

Нет способа ограничитьПринятие протокола в Цели С.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...