iphone - 在 Objective-C 中转发声明协议(protocol)

标签 iphone objective-c

我的类 .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/

相关文章:

objective-c - 段错误 11 | CGEventTap 应用程序在任意时间后停止处理鼠标事件。

ios - 将属性对象传递给需要 NSObject 的方法会导致指针错误

iphone - 在 UItextView iPhone 中获取最大内容偏移量

c# - UITextView - 设置边框颜色

iphone - 在 iOS 上,当 ViewController 的 View 设置为我的 UIView 子类时,为什么不存在这样的属性?

objective-c - iOS dispatch_async,在 iOS 4 上崩溃

iphone - 如何设置自动插入 $ 格式的小数值的文本字段值?

ios - 标准附件 View 可以位于 UITableViewCell 中的不同位置吗?

iphone - 带有 NSAttributedString 的 UITextView - 不应用属性

ios - 将数据从 View Controller 传递到 iOS 中的选项卡栏 Controller