@class for typedef enum?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@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
被识别,但@class
是否有typedef enum
?
不,没有相应的。
Objective-C中的枚举与C中的枚举相同。由于枚举的基础类型是依赖于实现的(例如,它可能是char
或int
),因此编译器必须知道枚举的完整声明。
那就是一个类型说明符
enum nameOfEnum
没有列出枚举成员是有效的C,只要它在它指定的类型完成后出现,即enum nameOfEnum { … }
必须预先出现在翻译单元中。
总结:没有枚举的前向声明,只有向后引用。
@Caleb,@ Bavarious:
最近的方式(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 */`
类似的问题Forward-declare enum in Objective-C
为了使两个类能够相互引用,必须进行类的前向声明。有两个相互定义的类并不罕见:
@class ClassB;
@interface ClassA : NSObject
{
ClassB *objectB;
}
@end
@interface ClassB : NSObject
{
ClassA *objectA;
}
@end
没有前向声明就没有办法进行编译。
枚举也是如此。 enum
只创建一组命名值...你不能在另一个的定义中包含一个枚举。因此,永远不需要转发声明枚举。
我想你想要的是一个将PasscodeInputMode作为它的属性的类。这样你就可以传递该类的实例化对象,并且可以设置/获取该属性,并使用它做其他类似对象的事情(假设这就是为什么你想要找到“@class等价物”的原因)
以上是关于@class for typedef enum?的主要内容,如果未能解决你的问题,请参考以下文章
枚举类型 typedef enum....; enum....; 这两个的区别