创建协议时找不到"UIViewController"的协议声明



我正在尝试定义我的协议,以便实现它的类也必须是一个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"的协议声明

如果我用NSObject替换UIViewController,代码就会编译。如果我在协议之后删除<>继承,代码就会编译。

我尝试了所有组合

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

无济于事。

我做错了什么?

你误解了语法。 @protocol MySuperProtocol<UIViewController> 没有建立约束,即MySuperProtocol的实施者必须UIViewController。 它说MySuperProtocol符合UIViewController

然而,与NSObject不同的是,UIViewController不是一个协议,而是一个类。 一个协议不能符合一个类,只能符合另一个协议。

您可以参考文档:

协议

继承自其他协议

就像 Objective-C 类可以从超类继承一样,你也可以指定一个协议符合另一个协议。

在目标 C 中没有办法限制协议的采用。

最新更新