複数の値を持つ列挙型パラメーターに特定の列挙型があるかどうかを確認する方法

技術に精通している

列挙型を返すメソッドがあります。

-(EnumType)supportedEnum {
return EnumTypeA | EnumTypeB | EnumTypeC;
}

別の方法では、サポートされている列挙型に次のような特定の列挙型が含まれているかどうかを比較しています。

if ([Instance supportedEnum] == EnumTypeA) {
NSLog("Class contains EnumTypeA");
}

しかし、この条件はどういうわけか間違っているので、それは機能していません。私は何が間違っているのですか?

CRD

オプションセットenumとして定義して使用しようとしているようです。これを行うには、最初にリテラルを2の累乗の値を持つように定義する必要があります。これは、基盤となるハードウェアがバイナリを使用するため、各値の値に1ビットが設定されていることを意味します。あなたはまたの基になる型を設定することができます:の一つにまたは; それぞれ最大8、16、32、または64のリテラルを持つことができます例えば:enumenumuint8_tuint16_tuint32_tuint64_tenum

typedef enum : uint8_t
{
   EnumTypeA = 0x1,
   EnumTypeB = 0x2,
   EnumTypeC = 0x4,
   EnumTypeD = 0x8,
   EnumTypeE = 0x10
} EnumType;

注:16進定数は、各値に1ビットのみが設定されていることをより明確に示すために使用されましたが、必要に応じて10進数(または8進数)を使用します。

注:Objective-Cは、NS_OPTIONSオプションセットenum定義に役立つマクロも提供します。これを使用するかどうかは選択の問題です。Swiftを使用して相互運用する場合は、Swiftを使用することをお勧めします。使用方法については、Appleのドキュメントを参照してください。

リテラルを組み合わせて、ビット単位を使用して設定値を生成します-または、|メソッドで行ったように:

- (EnumType)supportedEnum
{
   return EnumTypeA | EnumTypeB | EnumTypeC;
}

これは、EnumType正確に3ビットが設定されたの値を返します

存在する特定の値をテストするには、ビット単位で使用します&。たとえば、次のようになります

if ([instance supportedEnum] & EnumTypeA)
{
   NSLog("Class contains EnumTypeA");
}

これifは、述語式がゼロに等しくないことのテストとして機能します(これは、ifブール値の述語ではなく、整数値の述語を使用するという(Objective-)Cの特殊性です)。

enumリテラルのセットのいずれか1つ以上が存在するかどうかをテストする場合は、ビット単位のandおよびorを組み合わせます。たとえば、テストする、EnumTypeAおよび/またはEnumTypeC次のように記述します。

if ([instance supportedEnum] & (EnumTypeA | EnumTypeC) ) ...

存在するリテラルのセットをすべてテストするには、等価比較を追加する必要があります。例えば:

if ( ([instance supportedEnum] & (EnumTypeA | EnumTypeC)) == (EnumTypeA | EnumTypeC) ) ...

両方のテストEnumTypeAEnumTypeC

ビットごとのand、or、xorおよびinverse演算子、それらの複合代入バージョン、および(不)等式演算子を使用して、enum値の個々のリテラルを設定またはクリアできます。ユニオンなど2つ以上の値。リテラルの存在/設定および/または不在/クリアの組み合わせをテストします。

HTH

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

特定の文字列キーが列挙型に存在するかどうかを確認する方法

分類Dev

列挙型がdesire要素の1つであるかどうかをセッターで確認します

分類Dev

特定のメタタイプが列挙型であるかどうかを確認します

分類Dev

複数の「パラメータ」を持つKotlin列挙型

分類Dev

IF条件で列挙型のパラメータ値を取得するにはどうすればよいですか?

分類Dev

列挙型:異なる値を持つ同じ「タイプ」の複数の列挙型を作成しますか?

分類Dev

モデル列挙型で複数の値を確認するにはどうすればよいですか?

分類Dev

列挙型クラスがJavaのメソッドのパラメータである場合、列挙型の値を取得するにはどうすればよいですか?

分類Dev

Scala列挙型の値が文字列の配列に存在するかどうかを確認します

分類Dev

文字列列挙型の配列に文字列が含まれているかどうかを確認する方法

分類Dev

ある列挙型列から別の列挙型列に列挙値を「コピー」するにはどうすればよいですか?

分類Dev

列挙型パラメーターからTypescript関数の戻り値の型を推測する

分類Dev

URLの文字列値が列挙型に存在するかどうかを確認し、結果の値を変数に割り当てる方法は?

分類Dev

列挙型は可変数のパラメーターを持つことができますか?

分類Dev

列挙型に数値が含まれているかどうかを確認する方法は?

分類Dev

基になる型の値が列挙値であるかどうかをどのように確認する必要がありますか?

分類Dev

配列に特定の列挙型が含まれているかどうかを確認します

分類Dev

列挙型に複数のフラグが含まれていないかどうかを確認します

分類Dev

列挙型の配列に列挙値が存在するかどうかを確認するにはどうすればよいですか?

分類Dev

バイトが列挙型の値であるかどうかを確認します

分類Dev

特定の列挙型が複数の値を持つ可能性がある場合の処理方法

分類Dev

クラス内のいくつかの列挙型の1つであるパラメーターを持つ方法

分類Dev

列挙型のパラメーターの値を変更する方法(Swift)

分類Dev

列挙型フラグに特定のフラグ値が含まれているかどうかを確認します

分類Dev

c#列挙型フラグ文字列がフラグ内にあるかどうかを確認します

分類Dev

C ++で複数のデータフィールドを持つJava列挙型クラスを作成する方法

分類Dev

列挙型:列挙型クラスのメンバーに値を設定するにはどうすればよいですか?

分類Dev

変数がPythonで列挙型であるかどうかを確認する方法

分類Dev

C / C ++で複数の同様の値を持つ列挙型をどのようにswitch()しますか?

Related 関連記事

  1. 1

    特定の文字列キーが列挙型に存在するかどうかを確認する方法

  2. 2

    列挙型がdesire要素の1つであるかどうかをセッターで確認します

  3. 3

    特定のメタタイプが列挙型であるかどうかを確認します

  4. 4

    複数の「パラメータ」を持つKotlin列挙型

  5. 5

    IF条件で列挙型のパラメータ値を取得するにはどうすればよいですか?

  6. 6

    列挙型:異なる値を持つ同じ「タイプ」の複数の列挙型を作成しますか?

  7. 7

    モデル列挙型で複数の値を確認するにはどうすればよいですか?

  8. 8

    列挙型クラスがJavaのメソッドのパラメータである場合、列挙型の値を取得するにはどうすればよいですか?

  9. 9

    Scala列挙型の値が文字列の配列に存在するかどうかを確認します

  10. 10

    文字列列挙型の配列に文字列が含まれているかどうかを確認する方法

  11. 11

    ある列挙型列から別の列挙型列に列挙値を「コピー」するにはどうすればよいですか?

  12. 12

    列挙型パラメーターからTypescript関数の戻り値の型を推測する

  13. 13

    URLの文字列値が列挙型に存在するかどうかを確認し、結果の値を変数に割り当てる方法は?

  14. 14

    列挙型は可変数のパラメーターを持つことができますか?

  15. 15

    列挙型に数値が含まれているかどうかを確認する方法は?

  16. 16

    基になる型の値が列挙値であるかどうかをどのように確認する必要がありますか?

  17. 17

    配列に特定の列挙型が含まれているかどうかを確認します

  18. 18

    列挙型に複数のフラグが含まれていないかどうかを確認します

  19. 19

    列挙型の配列に列挙値が存在するかどうかを確認するにはどうすればよいですか?

  20. 20

    バイトが列挙型の値であるかどうかを確認します

  21. 21

    特定の列挙型が複数の値を持つ可能性がある場合の処理方法

  22. 22

    クラス内のいくつかの列挙型の1つであるパラメーターを持つ方法

  23. 23

    列挙型のパラメーターの値を変更する方法(Swift)

  24. 24

    列挙型フラグに特定のフラグ値が含まれているかどうかを確認します

  25. 25

    c#列挙型フラグ文字列がフラグ内にあるかどうかを確認します

  26. 26

    C ++で複数のデータフィールドを持つJava列挙型クラスを作成する方法

  27. 27

    列挙型:列挙型クラスのメンバーに値を設定するにはどうすればよいですか?

  28. 28

    変数がPythonで列挙型であるかどうかを確認する方法

  29. 29

    C / C ++で複数の同様の値を持つ列挙型をどのようにswitch()しますか?

ホットタグ

アーカイブ