你可以有一個NSDictionary
直接將命令名映射到代碼,無論是選擇器,調用或塊。喜歡的東西:
NSMutableDictionary *actions = [NSMutableDictionary dictionary];
[actions setObject:^{
[self getParam1];
[self getParam2];
[self navigateSomewhere];
} forKey:@"openPage1"];
然後:
dispatch_block_t action = [actions objectForKey:command];
if (action) {
action();
} else {
/* handle unknown command */
}
當然的字典將只是一次初始化,然後緩存。如果動作始終是相同的呼叫,只是根據不同的參數,你可以在命令名稱直接映射到參數:
// setup:
NSDictionary *commandsToPages = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:1], @"command1",
/* more mappings */,
nil];
// …and later:
NSNumber *pageNumber = [commandsToPages objectForKey:commandName];
[self displayPage:[pageNumber intValue]];
還有的也只是分析命令名稱提取頁面數量的選項,如果這是可能的。
PS。 (?)與LLVM 4.1開始,您還可以使用速記文字語法創建動作辭典,這使得它的眼睛更容易一點:
NSDictionary *actions = @{
@"command1" : ^{
…
},
@"command2" : ^{
…
},
};
注意,即使後面的逗號第二個命令塊的工作後, 。
是否所有這些命令都採用相同數量的參數並具有相同的返回值?如果是這樣,你可以使用字典查找。 – borrrden 2012-07-19 08:19:55