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?
答案 0 :(得分:1)