在一个头文件中,我有这样的东西:
// 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
等价物?
不,没有等价物。
Objective-C 中的枚举与 C 中的枚举相同。由于枚举的基础类型依赖于实现(例如,它可以是char
或int
),编译器必须知道枚举的完整声明。
也就是说,类型说明符
enum nameOfEnum
不列出枚举成员是有效的 C 如果它出现在它指定的类型完成后,即enum nameOfEnum { … }
必须事先出现在翻译单元中。
总结:没有枚举的前向声明,只有向后引用。
@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 */`
类似的问题 Objective-C 中的前向声明枚举
类的前向声明是必要的,以使两个类能够相互引用。有两个相互定义的类并不少见:
@class ClassB;
@interface ClassA : NSObject
{
ClassB *objectB;
}
@end
@interface ClassB : NSObject
{
ClassA *objectA;
}
@end
如果没有前向声明,就无法进行编译。
枚举的情况并非如此。 enum
只是创建一组命名值...不能在另一个枚举的定义中包含一个枚举。因此,永远不需要转发声明枚举。
我认为你想要的是一个将PasscodeInputMode作为其属性的类。 这样,您就可以传递该类的实例化对象,并且可以设置/获取该属性,并用它执行其他类似对象的事情(假设这就是为什么您想要找到"@class等效项"