在一个头文件中,我有类似的内容:
// 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
已被识别,但@class
的{{1}}是否相同?
答案 0 :(得分:14)
不,没有相应的。
Objective-C中的枚举与C中的枚举相同。由于枚举的基础类型是依赖于实现的(例如,它可能是char
或int
),编译器必须知道完整的枚举声明。
那就是一个类型说明符
enum nameOfEnum
没有列出枚举成员是有效的C,前提是 它指定的类型是完整的,即enum nameOfEnum { … }
必须事先出现在翻译单元中。
总结:没有枚举的前向声明,只有向后引用。
答案 1 :(得分:3)
@Caleb,@ Babarious:
最近的方式(2017年1月)转发在objective-c中声明枚举(NS_ENUM / NS_OPTION)是使用以下内容:
// 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 */`
答案 2 :(得分:0)
为了使两个类能够相互引用,必须进行类的前向声明。有两个按照彼此定义的类是很常见的:
@class ClassB;
@interface ClassA : NSObject
{
ClassB *objectB;
}
@end
@interface ClassB : NSObject
{
ClassA *objectA;
}
@end
如果没有前瞻性声明,就没有办法进行编译。
枚举也是如此。 enum
只创建一组命名值...您不能在另一个的定义中包含一个枚举。因此,永远不需要转发声明枚举。
答案 3 :(得分:-1)
我认为你想要的是一个将PasscodeInputMode作为其属性的类。这样你就可以传递该类的实例化对象,并可以设置/获取该属性,并使用它做其他类似对象的事情(假设这就是为什么你想要找到“@class等价物”