在一个头文件中,我有如下内容:
// PasscodeInputViewController.h
typedef enum {
PasscodeInputModeOn, // set passcode
PasscodeInputModeEnter, // enter passcode
PasscodeInputModeChange, // change passcode
PasscodeInputModeOff // turn off passcode
} PasscodeInputMode;在另一个头文件中,我声明了一个接受PasscodeInputMode类型参数的方法
#import "PasscodeInputViewController.h"
- (void)presentPasscodeInputWithMode:(PasscodeInputMode)mode;正如您所看到的,我如上所述使用了#import "PasscodeInputViewController.h",以便识别PasscodeInputMode,但是是否存在与typedef enum等效的@class
发布于 2011-05-06 12:09:12
不,没有等价物。
Objective-C中的枚举与C中的枚举相同。由于枚举的底层类型依赖于实现(例如,它可以是char或int),编译器必须知道枚举的完整声明。
也就是说,类型说明符
enum nameOfEnum没有列出枚举成员是有效的C,只要它在之后出现,它指定的类型是完整的,即enum nameOfEnum { … }必须预先出现在翻译单元中。
总而言之:枚举没有向前声明,只有向后引用。
发布于 2017-02-07 01:24:19
@Caleb,@Bavarious:
在objective-c中向前声明枚举(NS_ enum /NS_OPTION)的最新方法(2017年1月)是使用以下方法:
// Forward declaration for XYZCharacterType in other header say XYZCharacter.h
typedef NS_ENUM(NSUInteger, XYZCharacterType);
// Enum declaration header: "XYZEnumType.h"
#ifndef XYZCharacterType_h
#define XYZCharacterType_h
typedef NS_ENUM(NSUInteger, XYZEnumType) {
XYZCharacterTypeNotSet,
XYZCharacterTypeAgent,
XYZCharacterTypeKiller,
};
#endif /* XYZCharacterType_h */`发布于 2011-05-06 12:54:09
类的正向声明是使两个类能够相互引用所必需的。有两个相互定义的类并不少见:
@class ClassB;
@interface ClassA : NSObject
{
ClassB *objectB;
}
@end
@interface ClassB : NSObject
{
ClassA *objectA;
}
@end如果没有转发声明,就无法进行编译。
枚举并非如此。enum只是创建了一组命名值...您不能将一个枚举包含在另一个枚举的定义中。因此,永远不需要向前声明枚举。
https://stackoverflow.com/questions/5906547
复制相似问题