1. ホーム
  2. objective-c

Objective-Cにおけるenumの前方排他的宣言

2023-08-11 19:49:55

質問

Objective-Cのプログラムで、enumの可視性に問題があります。2つのヘッダーファイルがあり、1つは typedef enum . もう一つのファイルでは typedef 'd タイプを使用する必要があります。

ストレートCでは、単純に #include というヘッダファイルを作成しますが、Objective-Cでは、このヘッダファイルに #import を使用しないことを推奨します。その代わり、ヘッダーファイル間で前方の @class を使用します。しかし、列挙型を前方に宣言する方法を見つけ出すことができません。

実際の列挙された値は必要ないのですが、対応する .m 実装ファイルでは、安全に #import を離れています。では、どうすれば typedef enum をヘッダーで認識させるにはどうしたらよいでしょうか?

どのように解決するのですか?

objective-cでenum(NS_ENUM/NS_OPTION)を前方宣言する最も新しい方法(Swift 3; 2017年5月)は、次のようになります。

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