我的简单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
参数链接的错误:“期望的类型”。我也尝试通过以下方式在@class HistogramView
之前添加@protocol
:#import <Foundation/Foundation.h>
#import "HistogramView.h"
@class HistogramView;
@protocol DiagramViewDelegate <NSObject>
-(void)diagramSectionChangedWithOperation:(MoveOperation)op;
@end
但没有任何变化。你能帮助我吗?先感谢您。
最佳答案
三种选择:
删除#import "DiagramViewDelegate.h"
中的HistogramView.h
,并在@interface
前用@protocol DiagramViewDelegate
声明协议之前。提供了前向声明以解决循环问题,当两个类相互依赖时(如@class classname;
),通常使用它们
将#import "DiagramViewDelegate.h"
中的HistogramView.h
移到typedef
之后。这似乎有点“ hacky”,但直接观察到enum
是DiagramViewDelegate.h
所需要的,并导致...
将枚举移动到其自己的标题中,并同时包含在DiagramViewDelegate.h
和HistogramView.h
中。这是“更清洁”的方法(2)-即安排订单项由编译器读取。
高温超导