我的简单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”,但直接观察到enumDiagramViewDelegate.h所需要的,并导致...
将枚举移动到其自己的标题中,并同时包含在DiagramViewDelegate.hHistogramView.h中。这是“更清洁”的方法(2)-即安排订单项由编译器读取。


高温超导

10-08 09:31