我正在尝试定义我的协议,以便实现它的类也必须是一个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 中没有办法限制协议的采用。