我是简单的iOS objective-c应用程序我有两个.h文件相互链接。一个是Delegate Protocol
,另一个是Interface
,用于定义NS_ENUM
的类。
这是接口文件(HistogramView.h):
#import <UIKit/UIKit.h>
#import "DiagramViewDataSource.h"
#import "DiagramViewDelegate.h"
typedef NS_ENUM(NSInteger, MoveOperation) {
MOVE_BACKWARD,
MOVE_FORWARD
};
@interface HistogramView : UIView
@property (weak) id <DiagramViewDelegate> delegate;
@property (weak) id <DiagramViewDataSource> dataSource;
@end
这是委托协议(DiagramViewDelegate.h):
#import <Foundation/Foundation.h>
#import "HistogramView.h"
@protocol DiagramViewDelegate <NSObject>
-(void)diagramSectionChangedWithOperation:(MoveOperation)op;
@end
在委托中,编译器向我显示与MoveOperation
参数关联的错误:&#34;预期类型&#34; 。我还尝试在@class HistogramView
之前添加@protocol
:
#import <Foundation/Foundation.h>
#import "HistogramView.h"
@class HistogramView;
@protocol DiagramViewDelegate <NSObject>
-(void)diagramSectionChangedWithOperation:(MoveOperation)op;
@end
但没有任何改变。你能帮助我吗?提前谢谢。
答案 0 :(得分:5)
三个选项:
移除#import "DiagramViewDelegate.h"
中的HistogramView.h
,然后@interface
转发使用@protocol DiagramViewDelegate
声明协议。提供前向声明以解决循环问题,它们通常在两个类相互依赖时使用(如在@class classname;
中)
在<{em> #import "DiagramViewDelegate.h"
后移动HistogramView.h
中的typedef
到。这可能看起来有点“hacky”,但直接观察到enum
需要DiagramViewDelegate.h
并导致......
将枚举移动到自己的标头中,并包含在DiagramViewDelegate.h
和HistogramView.h
中。这是“更清洁”的方式(2) - 即安排订单项将由编译器读取。
HTH
答案 1 :(得分:1)
我通常会将Constants.h文件添加到我的所有项目中。在您的特定情况下,您可以在此处添加ES_ENUM
。
然后在使用ES_ENUM
的其他每个文件中添加#import "Constants.h"
。