使用swift使用字符串进行动态方法调用

时间:2014-06-13 14:37:50

标签: swift dynamic-programming

swift是否支持使用字符串调用方法的能力?

我会从http://pilky.me/21/窃取一个很好的例子来说明我希望能够迅速做些什么。这是一个简单的例子,但对于某些设计模式,这种功能非常强大,并且在许多其他流行语言中都得到支持。

- (void)parseObject:(id)object {
    for (id data in object) {
        if ([[data type] isEqualToString:@"String"]) {
            [self parseString:[data value]]; 
        } else if ([[data type] isEqualToString:@"Number"]) {
            [self parseNumber:[data value]];
        } else if ([[data type] isEqualToString:@"Array"]) {
            [self parseArray:[data value]];
        }
    }
}

- (void)parseObjectDynamic:(id)object {
    for (id data in object) {
        [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"parse%@:", [data type]]) withObject:[data value]];
    }
}

- (void)parseString:(NSString *)aString {}
- (void)parseNumber:(NSString *)aNumber {}
- (void)parseArray:(NSString *)aArray {}
  

如您所见,您可以使用单个替换7行if语句   线。而且好处是如果你需要支持一种新类型   未来,你只需添加新方法,而不是必须记住   如果你的主解析方法添加了额外的其他内容。

我知道你可以动态调用一个块。

这里有一个类似的SO问题,但没有解决如何使用字符串快速执行此操作: Alternative to performSelector in Swift?