objective c - @class for typedef enum?



在一个头文件中,我有这样的东西:

// 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 中的枚举相同。由于枚举的基础类型依赖于实现(例如,它可以是charint),编译器必须知道枚举的完整声明。

也就是说,类型说明符

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等效项"

相关内容

  • 没有找到相关文章

最新更新