假设我们有一个轮询方法,它使用一个服务并基于响应(eventType)调用一个处理程序,就像(只是想法):
-(void)pollData {
[[ProjectApi sharedInstance] getEvent:^(NSDictionary *event){
EventType type = /*Take eventType*/
switch (type) {
case type1:
[self handleType1WithResponse:event];
break;
case type2:
[self handleType2WithResponse:event];
break;
...
case typeN:
[self handleTypeNWithResponse:event];
break;
}
}];
}
正如你所看到的那样,有一堆处理程序,是否有一种简化这种模式(或者更优雅的方式,一个目标是减少ViewController的责任,但是这个方法中的一些可以与控制器交互)? (除了委托或通过处理程序创建类)。
答案 0 :(得分:0)
一种方法:从某个标量类型构造一个字符串...
int type = 7; // say it's an int
NSString *string = [NSString stringWithFormat:@"handleType%dWithResponse:", type];
然后从字符串构建一个选择器:
SEL selector = NSSelectorFromString(string);
然后执行选择器。 (首先测试你是否有方法也不是一个坏主意)...
if ([self respondsToSelector:selector]) {
[self performSelector:selector withObject:event];
}