我的类 .h 看起来像:
@protocol AppInfoDelegate;
@class InfoTextView;
@interface AppInfoViewController : UIViewController <AppInfoDelegate> {
}
@property (nonatomic, retain) NSArray *textObjectsArray;
@property (nonatomic, retain) InfoTextView *itView;
@property (nonatomic, retain) UIButton *pgBackButton;
@property (nonatomic, retain) UIButton *pgFwdButton;
@end
@protocol AppInfoDelegate <NSObject>
- (void)closeButtonPressed:(id)sender;
@end
我收到一条警告,指出无法找到 AppInfoDelegate 的协议(protocol)定义。执行此操作的正确方法是什么以及为什么找不到它?在接口(interface)之前我需要有协议(protocol)的完整定义吗?谢谢!
最佳答案
使用@protocol MyProtocol;
例如,当您断言某个方法将采用 id <MyProtocol>
时,这很有用。作为一个论点。
当您声称您的类符合 <MyProtocol>
时,它没有有用。 。原因是编译器需要完整的协议(protocol)声明才能验证您的类实际上符合协议(protocol)。 (这种编译时检查是使用正式协议(protocol)而不是旧的非正式协议(protocol)的一个重要原因。)
您可以通过两种方式进行修复。正如 @skram 所建议的,其中之一就是向前声明整个事情。这是可行的,但在我看来它也相当有限。在这种情况下为什么要费心使用协议(protocol) - 只需将所有内容放入类中 @interface
并完成它。
我更喜欢的第二种方法是实际上有一个单独的 header ,例如 MyProtocol.h
。然后,您可以根据需要将其自由导入到任何头文件或实现文件中。这使您可以轻松地重用协议(protocol)(并避免有时出现的循环导入的麻烦)。
关于iphone - 在 Objective-C 中转发声明协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11091786/