タイプを処理するために使用されるクラス名に対して、投稿タイプの (ある種の)マップを保持できます。
static struct
{
PostType type; // A typedef'd enum with POST_TYPE_ONE, ...
NSString *classname;
} _handlers[] =
{
{ POST_TYPE_ONE, @"OneHandler" },
{ POST_TYPE_TWO, @"TwoHandler" },
....
{ POST_TYPE_TWENTY, @"TwentyHandler" }
};
const NSUInteger NUM_HANDLERS = sizeof(_handlers) / sizeof(_handlers[0]);
次に、以下を使用してクラス インスタンスをインスタンス化します。
id handler = nil;
for (NSUInteger index = 0; index < NUM_HANDLERS && handler == nil; index++)
{
if (postType == _handlers[index].postType)
{
handler = [[ NSClassFromString(_handlers[index].classname) alloc ] init];
}
}
postType
または、常に 0 から 19 の間になることを保証できる場合は、クラス名の配列を保持して次を使用できます。
id handler = [[ NSClassFromString(_handlers[postType] alloc ] init];
共通の機能を提供するために、すべてのハンドラー クラスが共通の基本クラスから派生していることを確認する必要があります。