我尝试在头文件中尽可能少地导入(使用实现文件),对于类我们可以使用@class,但是协议呢?如果我尝试使用@protocol声明我将在该标头中使用的协议,我会收到警告“无法找到'...'的协议定义”
只是通过导入执行协议声明的标头来处理这个问题的正确方法吗? (所以一个.h文件导入另一个.h)
ListViewController.h的示例:
#import <UIKit/UIKit.h>
#import "JTRevealSidebarV2Delegate.h" // is this the best way?
@class List;
@protocol JTRevealSidebarV2Delegate; // this produces a warning.
@interface ListViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, JTRevealSidebarV2Delegate>
答案 0 :(得分:5)
您需要#import
。 @protocol
没有为编译器提供足够的信息来进行类型检查。
(当你声明类型为List
的属性时,它需要知道的是你真正的意思是List
而不是Lisp
。指向任何对象的指针是相同的另一方面,协议包含一个类需要做的东西的列表。它需要知道什么“东西”做任何有用的事情。)
答案 1 :(得分:3)
这是正确的,但是如果你想挑剔,你可以随时创建一个单独的.h文件,只声明你的协议,并让ListViewController
和JTRevealSidebarV2Delegate
导入它
答案 2 :(得分:1)
要做的步骤