Search code examples
objective-cenumstypedefextern

Forward-declare enum in Objective-C


I'm having trouble with enum visibility in an Objective-C program. I have two header files, and one defines a typedef enum. Another file needs to use the typedef'd type.

In straight C, I would simply #include the other header file, but in Objective-C, it's recommended not to use #import between header files, instead using forward @class declarations as needed. However, I can't figure out how to forward-declare an enumeration type.

I don't need the actual enumerated values, except in the corresponding .m implementation file, where I can safely #import away. So how can I get the typedef enum to be recognized in the header?


Solution

  • Most recent way (Swift 3; May 2017) to forward declare the enum (NS_ENUM/NS_OPTION) in objective-c is to use the following:

    // 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 */`