我在enum
文件中声明了.h
,如下所示:
typedef enum {
item1 = 0,
item2,
item3
} myEnum;
我想在视图控制器中的委托方法签名中使用它,如下所示:
@protocol myClassDelegate <NSObject>
- (void)myDelegateMethod:(enum myEnum)type;
@end
我在此视图控制器类中包含了.h
文件。
自动完成不会在创建上述协议时建议枚举,并且编译器也会抱怨。
使用int
代替签名中的枚举可以正常工作。但是,我想知道是否存在使用枚举的方法,或者我是否做错了。
我经历了很多帖子,但所有这些都是正常的方法。
修改
ViewControllerA.h
#import <UIKit/UIKit.h>
#import "ViewControllerB.h"
typedef enum {
item1 = 0,
item2,
item3
} myEnum;
@interface ViewControllerA : UIViewController <myClassDelegate>
@end
ViewControllerB.h
#import <UIKit/UIKit.h>
#import "ViewControllerA.h"
@protocol myClassDelegate <NSObject>
- (void)myDelegateMethod:(enum myEnum)type; // Autocomplete does not suggest the enums
// Also, x-code gives warning: Declaration of 'enum myEnum' will not be visible outside of this functio
@end
@interface ViewControllerB : UITableViewController
@property (nonatomic, strong) id<myClassDelegate> delegate;
@end
答案 0 :(得分:2)
您有一个循环标头依赖项(ViewControllerA.h
导入ViewControllerB.h
,反之亦然)。
将enum
声明移到公共标题文件中,然后将其导入到需要的地方:
CommonTypes.h:
typedef enum {
item1,
item2,
item3
} MyEnum;
ViewControllerA.h:
#import <UIKit/UIKit.h>
#import "ViewControllerB.h"
@interface ViewControllerA : UIViewController <myClassDelegate>
// I assume there is a reference to ViewControllerB here somewhere?
@end
ViewControllerB.h:
#import <UIKit/UIKit.h>
#import "CommonTypes.h"
@protocol myClassDelegate <NSObject>
- (void)myDelegateMethod:(MyEnum)type;
@end
@interface ViewControllerB : UITableViewController
@property (nonatomic, strong) id<myClassDelegate> delegate;
@end
答案 1 :(得分:1)
Here是一个演示视图控制器结构的示例,它对我有用。