web-dev-qa-db-ja.com

列挙値を辞書に保存する

列挙値を辞書に保存するにはどうすればよいですか?

次のことを試してみると

enum someEnum
{
    field0 = 0,
    field1 = 1,
    field2 = 2,
};

enum someEnum someEnumObject;

を使用して辞書に保存しようとしています

[NSDictionary辞書WithObjectsAndKeys:]

someEnumObject, @"enum", 

私はこれを手に入れます

警告:セマンティックの問題:整数からポインタへの変換に互換性がなく、「列挙型の動作」を「id」型のパラメータに送信しています

20
user773578

以下を使用して辞書に保存します。

[NSNumber numberWithInt:enumValue], @"enum",

そして、次のように取得できます。

enumValue = [[dictionary valueForKey:@"enum"] intValue];
49
EmptyStack

NSNumberリテラルを使用して列挙型をオブジェクトに変換し、NSDictionaryに格納できるようにすることをお勧めします。

[NSDictionary dictionaryWithObjectsAndKeys:@(someEnumObject), @"enum", nil];

リテラルは、ものを書くための速記を提供します。この辞書は次のように書くことができます。

@{@"enum":@(someEnumObject)};

リテラルの詳細については、こちらをご覧ください: http://clang.llvm.org/docs/ObjectiveCLiterals.html

10
jarora

enumは基本的に整数であり、NSDictionaryはオブジェクトを格納するため、列挙型をオブジェクトに変換する必要があります。 NSNumberはこれに適しています:

[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:someEnumObject], @"enum", nil];
8

現代では、@(enumValue)がより簡単なアプローチです。

0
Amin Negm-Awad