ボタン ID の定義済みの列挙型があります。
typedef enum
{
button1ID = 407,
button2ID = 999,
button3ID = 408,
button4ID = 409,
} TOP_MENU_BUTTON_TYPE;
受け取った ID が列挙型で定義されているかどうかを確認する必要があります。どうやってやるの?何かのようなもの:
if(id in TOP_MENU_BUTTON_TYPE)
ボタン ID の定義済みの列挙型があります。
typedef enum
{
button1ID = 407,
button2ID = 999,
button3ID = 408,
button4ID = 409,
} TOP_MENU_BUTTON_TYPE;
受け取った ID が列挙型で定義されているかどうかを確認する必要があります。どうやってやるの?何かのようなもの:
if(id in TOP_MENU_BUTTON_TYPE)
列挙型を動的に反復する方法はありません。列挙型は静的な機能であり、実行時には存在しません。実行時には、それらは(ある程度のサイズの)単なる整数と値です。
あなたが報奨金で述べたこの要件では不可能です:
あなたの答えでは、列挙型のハードコードされた値を使用せず、そのタイプだけを使用してください。
他の回答は、静的にそれを行うためのほとんどすべての方法を示しています。
私があなたの質問を明確に理解していれば、これはあなたに役立つでしょう..
enum
単独で使用する代わりに、それを試してみてstruct
ください。@Richard の回答がその方法に役立ちます。
https://stackoverflow.com/a/10305425/1083859
enum
上記のリンクで、彼は動的な値を使用する方法を説明しており、値を見つけるstruct
こともできます。iterate
私はあなたがアイデアを得ると思います。
これを簡単に行うことができます:
int validValue = button1ID | button2ID | button3ID | button4ID;
if (validValue & id)
// Valid enum value
Anenum
はオブジェクトではなく、コンパイラがビルド時に理解する単なる整数です。このため、チェックを行うために低レベルのコードを提供する必要があります。
列挙型の値を事前に定義していない場合、列挙型は0から始まり、1ずつ増加します。これにより、値を比較して、それが最後の要素であるかどうかを確認できます。
この方法を試してください:
-(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
}
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) ...
.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;
}