2

Javaではこれが可能です:

enum VisitSetting {
  NOT_VISITED,
  QUERIED_VISITED,
  CONFIRMED_VISITED
}

enum ExcludeSetting {
  NONE,
  QUERIED_VISITED_AND_CONFIRMED_VISITED,
  CONFIRMED_VISITED
}

CONFIRMED_VISITED は VisitSetting と ExcludeSetting にあることに注意してください。

私は客観的なcで何かsimulairが欲しいのですが、それから私は得るRedefinition of enumerator 'CONFIRMED_VISITED'

これは実装です:

#ifndef RouteApp_IGConstants_h
#define RouteApp_IGConstants_h

typedef enum {
    NOT_VISITED = 0,
    QUERIED_VISITED,
    CONFIRMED_VISITED
} VisitSetting;

typedef enum {
    NONE = 0,
    QUERIED_VISITED_AND_CONFIRMED_VISITED,
    CONFIRMED_VISITED
} ExcludeSetting;



#endif

これはどのように修正できますか?CONFIRMED_VISITED の名前を変更しないことをお勧めします。

4

3 に答える 3

10

C では、したがって Objective-C では、列挙子はグローバル名前空間にあります。したがって、2 つの列挙で同じ列挙子を使用することはできません。Objective-Cで少なくとも 1 つのCONFIRMED_VISITED列挙子の名前を変更する必要があります。通常、次のように、列挙の各メンバーに共通のプレフィックスを使用します。

typedef enum {
    VisitSettingNotVisited = 0,
    VisitSettingQueried,
    VisitSettingConfirmed
} VisitSetting;

typedef enum {
    ExcludeSettingNone = 0,
    ExcludeSettingQueriedAndConfirmed,
    ExcludeSettingConfirmed
} ExcludeSetting;

Objective-C++を使用する場合は、enum class. これは、プレーン C には同等のものがない新しい C++ 機能です。

enum class VisitSetting {
  NOT_VISITED,
  QUERIED_VISITED,
  CONFIRMED_VISITED
};

enum class ExcludeSetting {
  NONE,
  QUERIED_VISITED_AND_CONFIRMED_VISITED,
  CONFIRMED_VISITED
};

// Example usage:
VisitSetting vs = VisitSetting::CONFIRMED_VISITED;
ExcludeSetting es = ExcludeSetting::CONFIRMED_VISITED;

この C++11 機能は、Xcode 4.6.2 でサポートされています。古いバージョンでサポートされている可能性があります。知らない。

于 2013-04-28T12:37:10.757 に答える
0

それはいけません。これは C であり、オブジェクトではありません。Cでは、列挙型は、いくつかの整数を作成し、最小限に関連付けるための便利な方法にすぎません。与えられた名前は、C で整数に割り当てられた名前です。これを行うと、効果的に同様のことを実現できます。列挙型メンバーを CONFIRM_VISITED に割り当てて、同じ整数値を与え、同じ状況で使用できるようにするだけです。

Cocoa フレームワークは列挙型メンバー名にプレフィックスを付ける傾向があるため、疑似名前空間とコンテキストの明確さが得られます。このスタイルでは、同じ値を持つが次のような名前の 2 つの整数があります...

より一般的なスタイルは、すべてキャメル ケースです。

VisitSettingConfirmVisited ExcludeSettingConfirmVisited

明らかに、十分なオーバーラップがある場合は、それらを適切な名前の単一の列挙型にマージすることが理にかなっている可能性があります。

また、それらを作成するための NS_ENUM 機能もお見逃しなく。とても便利。

于 2013-04-28T12:36:23.077 に答える