3

case /switchステートメントで機能するObjectiveCのグローバルint定数を使用する方法はありますか?ここでのテクニック(http://stackoverflow.com/questions/538996/constants-in-objective-c)を使用すると、どこからでも定数にアクセスできますが、switchステートメントに入れることはできません。

.hで

FOUNDATION_EXPORT const int UNIT_IDLE;
FOUNDATION_EXPORT const int UNIT_DEFEND;

.mで

int const UNIT_IDLE = 0;
int const UNIT_DEFEND = 1;

エラーは「式は整数定数式ではありません」です

4

3 に答える 3

5

私は通常、switchステートメントで使用する定数を使用するときにtypedefステートメントで列挙を使用します。

たとえば、これはProjectEnums.hなどの共有.hファイルにあります。

enum my_custom_unit
{
    MyCustomUnitIdle    = 1,
    MyCustomUnitDefend  = 2
};
typedef enum my_custom_unit MyCustomUnit;

次に、.c、.m、.cppファイルで次のswitchステートメントのようなコードを使用できます。

#import "ProjectEnums.h"

- (void) useUnit:(MyCustomUnit)unit
{
    switch(unit)
    {
        case MyCustomUnitIdle:
        /* do something */
        break;

        case MyCustomUnitDefend:
        /* do something else */
        break;

        default:
        /* do some default thing for unknown unit */
        break;
    };
    return;
};

これにより、コンパイラは、メソッドに渡され、コンパイル時にswitchステートメント内で使用されるデータを検証することもできます。

于 2012-06-27T21:52:16.533 に答える
1

私はあなたの最良の選択肢はを使用することだと思いますenum types。ヘッダーファイルで型を宣言するだけで、switchステートメントで使用できるようになります。

class.h

typedef enum{
    kEditGameModeNewGame = 0,
    kEditGameModeEdit = 1
}eEditGameMode;

class.m

eEditGameMode mode = kEditGameModeEdit;

switch (mode) {
    case kEditGameModeEdit:
        // ...
        break;
    case kEditGameModeNewGame:
        // ...
        break;

    default:
        break;
}

幸運を!

于 2012-06-27T21:51:51.697 に答える
0

公式ガイドラインでは、「整数値を持つ関連する定数のグループの列挙」を使用する必要があるとされています。それはあなたの問題を解決し、コードを改善するかもしれません。

于 2012-06-27T22:08:30.560 に答える