5

ボタン ID の定義済みの列挙型があります。

typedef enum
{
    button1ID = 407,
    button2ID = 999,
    button3ID = 408,
    button4ID = 409,
} TOP_MENU_BUTTON_TYPE;

受け取った ID が列挙型で定義されているかどうかを確認する必要があります。どうやってやるの?何かのようなもの:

if(id in TOP_MENU_BUTTON_TYPE)
4

7 に答える 7

2

列挙型を動的に反復する方法はありません。列挙型は静的な機能であり、実行時には存在しません。実行時には、それらは(ある程度のサイズの)単なる整数と値です。

あなたが報奨金で述べたこの要件では不可能です:

あなたの答えでは、列挙型のハードコードされた値を使用せず、そのタイプだけを使用してください。


他の回答は、静的にそれを行うためのほとんどすべての方法を示しています。

于 2013-02-18T08:22:39.927 に答える
1

私があなたの質問を明確に理解していれば、これはあなたに役立つでしょう..

enum単独で使用する代わりに、それを試してみてstructください。@Richard の回答がその方法に役立ちます。

実行時に列挙値を変更しますか?

https://stackoverflow.com/a/10305425/1083859

enum上記のリンクで、彼は動的な値を使用する方法を説明しており、値を見つけるstructこともできます。iterate私はあなたがアイデアを得ると思います。

于 2013-02-20T07:31:49.643 に答える
1

これを簡単に行うことができます:

int validValue = button1ID | button2ID | button3ID | button4ID;
if (validValue & id)
    // Valid enum value
于 2013-02-19T15:35:31.630 に答える
0

Anenumはオブジェクトではなく、コンパイラがビルド時に理解する単なる整数です。このため、チェックを行うために低レベルのコードを提供する必要があります。

列挙型の値を事前に定義していない場合、列挙型は0から始まり、1ずつ増加します。これにより、値を比較して、それが最後の要素であるかどうかを確認できます。

于 2013-02-13T12:30:45.040 に答える
0

この方法を試してください:

-(BOOL)isDefined:(TOP_MENU_BUTTON_TYPE)type{
    BOOL isDefined;
    switch (type) {
        case button1ID:
        case button2ID:
        case button3ID:
        case button4ID:
            isDefined = TRUE;
            break;
        default:
            isDefined = FALSE;
            break;
    }
    return isDefined;
}

//(...)
    TOP_MENU_BUTTON_TYPE test;
    test = 407;
    NSLog(@"is %d a TOP_MENU_BUTTON_TYPE? result: %d", test, [self isDefined:test]);
    test = 2;
    NSLog(@"is %d a TOP_MENU_BUTTON_TYPE? result: %d", test, [self isDefined:test]);

それで:

if ([self isDefined:test]){
    // OK, test is defined in TOP_MENU_BUTTON_TYPE
} 
于 2013-02-13T12:50:42.943 に答える
0

switchの使用または束について||の回答ifは正しいですが…</p>

大きな列挙型 (多くの値を持つ列挙型) がある場合は、これをより簡単にすることができます。Cocoa もこのトリックを使用します。

列挙値は1 ずつインクリメントする必要があります。
次に、enum に 2 つの追加の値を追加します。

typedef enum {
    buttonIDMin = 407, // Lowest value

    button1ID = 407,
    button2ID = 408, // Incremented by ONE
    button3ID = 409,
    button4ID = 410,

    buttonIDMax = 410, // Highest value

} TOP_MENU_BUTTON_TYPE;

比較するときは、次のことを行うだけです。

if (buttonID >= buttonIDMin && buttonID <= buttonIDMax) ...
于 2013-02-17T09:47:05.243 に答える
0

.h で

typedef enum
{
    407,
    999,
    408,
    409,
} TOP_MENU_BUTTON_TYPE;

@interface CheckoutController : UIViewController{
TOP_MENU_BUTTON_TYPE type;
}  

.m

switch (status) {
        case 407:
            //Your Task
            break;
        case 999:
            //Your Task
            break;
        case 408:
            //Your Task
            break;
        case 409:
            //Your Task
            break;
    }
于 2013-02-13T12:54:44.333 に答える