ma1*_*w28 21 enums typedef objective-c
在一个头文件中,我有类似的东西:
// PasscodeInputViewController.h
typedef enum {
PasscodeInputModeOn, // set passcode
PasscodeInputModeEnter, // enter passcode
PasscodeInputModeChange, // change passcode
PasscodeInputModeOff // turn off passcode
} PasscodeInputMode;
Run Code Online (Sandbox Code Playgroud)
在另一个头文件中,我声明了一个采用类型参数的方法PasscodeInputMode:
#import "PasscodeInputViewController.h"
- (void)presentPasscodeInputWithMode:(PasscodeInputMode)mode;
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我使用#import "PasscodeInputViewController.h"如上所述,因此PasscodeInputMode被认可,但是有@class相同的typedef enum吗?
小智 14
不,没有相应的.
Objective-C中的枚举与C中的枚举相同.由于枚举的基础类型是依赖于实现的(例如,它可能是char或int),因此编译器必须知道枚举的完整声明.
那就是一个类型说明符
enum nameOfEnum
Run Code Online (Sandbox Code Playgroud)
没有列出枚举成员是有效的C,只要它在指定的类型完成后出现,即enum nameOfEnum { … }必须事先出现在翻译单元中.
总结:没有枚举的前向声明,只有向后引用.
@Caleb,@Bvarious:
在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 */`
Run Code Online (Sandbox Code Playgroud)
Objective-C 中的类似问题Forward-declare enum
| 归档时间: |
|
| 查看次数: |
7946 次 |
| 最近记录: |