我正在寻找一种从NSString转换为类实例变量的方法。对于下面的示例代码,请说filter是“colorFilter”。我希望filternameclassinstancegohere替换为colorFilter。
- (void)filterSelected:(NSString *)filter
{
self.filternameclassinstancegohere = ….;
}
答案 0 :(得分:5)
虽然为这个问题提供了很好的建议解决方案,但我发现我需要的是NSClassFromString方法。这是最终实施:
- (void)filterSelected:(NSString *)filter
{
//self.filternameclassinstancegohere = ….;
self.myViewController = [[NSClassFromString(filter) alloc] initWithNibName:filter bundle:nil];
}
答案 1 :(得分:4)
考虑将一个NSMutableDictionary实例变量与字符串键而不是40个实例变量一起使用。
答案 2 :(得分:2)
您可以使用NSSelectorFromString()
:
SEL methodName = NSSelectorFromString(filter);
[self performSelector:methodName];
这将在上面的示例中调用方法colorFilter
。
在打电话之前检查respondsToSelector
是明智的。
答案 3 :(得分:1)
如果过滤器值只能是一个小的,常数的东西,只需使用枚举和switch语句:
enum Filter
{
ColorFilter,
FooFilter,
BarFilter
};
- (void)filterSelected:(Filter)filter
{
switch(filter)
{
case ColorFilter:
self.colorFilter = ...;
break;
case FooFilter:
self.fooFilter = ...;
break;
case BarFilter:
self.barFilter = ...;
break;
}
}
如果过滤器值集很大并且可能经常更改,那么您也可以使用Key-Value Coding。它更复杂但更灵活。