我正在尝试定义协议,以便实现该协议的类也必须是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>
无济于事。
我在做什么错了?
答案 0 :(得分:1)
您误解了语法。 @protocol MySuperProtocol<UIViewController>
没有建立约束,即MySuperProtocol
的实现者必须是UIViewController
s个。它说MySuperProtocol
符合UIViewController
但是,与NSObject
不同,UIViewController
不是协议;这是一类。一个协议不能符合一个类,只能符合另一个协议。
您可以参考文档:
Protocols inherit from other protocols
以与Objective-C类可以从超类继承的方式相同,您还可以指定一个协议与另一个协议兼容。
在目标C中无法限制协议的采用。