委托方法声明中的枚举

时间:2014-12-08 09:33:23

标签: ios objective-c enums delegates

我在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

2 个答案:

答案 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是一个演示视图控制器结构的示例,它对我有用。