0

こんにちは、エラー コードを保持する列挙型があります。

問題は、それらが連続していないことです。

enum{
    ErrorCode1                = 1,
    ErrorCode2                = 4,
    ErrorCode3                = 74
}; typedef NSInteger  MyErroCodes;

また、おそらく50以上のコードがあるので、データを複製したり、手動で実行したりする必要はありません.これは、これまでの検索で見たものです. どんな助けでも大歓迎です。

4

2 に答える 2

3

enum コンストラクトは、コンパイル時にのみ存在します。実行時には、MyErrorCodes インスタンスは単純な整数であり、ErrorCodeN 値は単純な整数定数です。実行時に列挙型からメタデータを抽出する方法はありません (まあ、デバッグ情報などにあるかもしれませんが、そこには行きたくありません...)。

私は提案します:

  • 小さなスクリプト (Python、Perl など) を作成して、数値コードを文字列値にマップする関数を生成します。XCode では、必要に応じて、コンパイル フェーズ中にコード ジェネレーターを実行することもできます。
  • メタプログラミングまたはプリプロセッサ マクロを使用して、コンパイル中にこれらの関数を生成します。これには少し考えが必要ですが、実行できます。
于 2012-05-10T08:17:22.603 に答える
0

これは、多くの場合、ボディ内のすべての値を含むファイルのインクルードを使用して、場合によってはマクロを使用して実現されます。

ErrorCode_enum.h

MON_ENUM_VALUE(ErrorCode1, 1)
MON_ENUM_VALUE(ErrorCode2, 4)
MON_ENUM_VALUE(ErrorCode3, 74)

どこで可変マクロ展開MON_ENUM_VALUEになります。

enum 宣言は次の形式を取る場合があります。

enum {
#include "mon_enum_value_begin.h" // defines MON_ENUM_VALUE and such
#include "ErrorCode_enum.h"
#include "mon_enum_value_end.h" // undefines MON_ENUM_VALUE and everything else defined in mon_enum_value_begin.h
};
typedef NSInteger  MyErroCodes;

その後、次のように書くことができます。

#include "mon_enum_NSNumber_begin.h" // defines MON_ENUM_VALUE and such
#include "ErrorCode_enum.h"
#include "mon_enum_NSNumber_end.h" // undefines MON_ENUM_VALUE and…

また

#include "mon_enum_NSError_begin.h" // defines MON_ENUM_VALUE and such
#include "ErrorCode_enum.h"
#include "mon_enum_NSError_end.h" // undefines MON_ENUM_VALUE and…

これらのタグと値を他のタイプに追加または文字列化できます。

個人的には、マクロは大雑把で、別のアプローチを取るだけだと思います (確かに、書くのはもっと面倒かもしれません)。

于 2012-05-10T08:16:54.863 に答える