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

时间:2019-03-25 00:42:13

标签: ios objective-c

我正在尝试定义协议,以便实现该协议的类也必须是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 个答案:

答案 0 :(得分:1)

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

但是,与NSObject不同,UIViewController不是协议;这是一类。一个协议不能符合一个类,只能符合另一个协议。

您可以参考文档:

  

Protocols inherit from other protocols

     

以与Objective-C类可以从超类继承的方式相同,您还可以指定一个协议与另一个协议兼容。

在目标C中无法限制协议的采用。