列挙型をXMLに格納してそれを再び読み込む最もクリーンな方法は何ですか?Cの列挙型とXMLの間の変換
enum ETObjectType {ETNormalObjectType, ETRareObjectType, ETEssentialObjectType};
を...と私は、変数を取りたい、enum ETObjectType objectType = ETNormalObjectType;
、このようなXMLに変換します:<objectType>ETNormalObjectType</objectType>
私が持っていると言います。私がやっている現在
は次のようなものです:
NSString* const ETObjectTypeAsString[] = {@"ETNormalObjectType",@"ETRareObjectType",@"ETEssentialObjectType"};
[anXMLElement addChild:[NSXMLElement elementWithName:@"objectType" stringValue:ETObjectTypeAsString[objectType]]];
...しかし、それは完全に理想的ではありません。私はenumを変更するたびに両方のリストを更新することに満足していません。しかしそれは受け入れられる。多くの場合、XMLを読んでいるうちに、私は現在これをやっています:
if ([[[anXMLElement childNamed:@"objectType"] stringValue] isEqualToString:@"ETRareObjectType"])
{
[self initObjectType:ETRareObjectType];
}
else if ([[[anXMLElement childNamed:@"objectType"] stringValue] isEqualToString:@"ETEssentialObjectType"])
{
[self initObjectType:ETEssentialObjectType];
}
else
{
[self initObjectType:ETNormalObjectType];
}
ヤンク!これは私を嫌にする。読んで、少なくとも読んだり、書いたりする統一された方法を、もっときれいにする方法が必要ですか?
私はObj-CとCocoaを使用していますが、私は純粋なCの関数を気にしません。それが唯一の方法なら、私はプリプロセッサのものを使うことさえあります。ここで
ヘッダファイルに列挙型と文字列の両方を保持するための素晴らしいアイデアです。 NSArrayメソッドにすることについて何か気になるものがありますが、とにかくそれをやると思います。ありがとう! – andyvn22
check関数はどこに定義されていますか? – zekel
checkはAssertMacros.hでverify、require、および_noerr、_action、_quiet、_stringの各バリエーションとともに定義されています。コード全体に頻繁に振りかける必要がありますので、ユーザーが行う前にバグを見つけることができます。 –