NSString 到类实例变量

发布于 2024-12-18 01:42:46 字数 236 浏览 2 评论 0原文

我正在寻找一种从 NSString 转换为类实例变量的方法。对于下面的示例代码,假设过滤器是“colorFilter”。我希望将这里的filternameclassinstancegohere 替换为colorFilter。

- (void)filterSelected:(NSString *)filter
{
    self.filternameclassinstancegohere = ….;
}

I am looking for a way to convert from NSString to a class instance variable. For sample code below, say filter is "colorFilter". I want filternameclassinstancegohere to be replaced with colorFilter.

- (void)filterSelected:(NSString *)filter
{
    self.filternameclassinstancegohere = ….;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

诗化ㄋ丶相逢 2024-12-25 01:42:46

虽然针对这个问题给出了很好的建议解决方案,但我发现我需要的是 NSClassFromString 方法。这是最终的实现:

- (void)filterSelected:(NSString *)filter
{
    //self.filternameclassinstancegohere = ….;
    self.myViewController = [[NSClassFromString(filter) alloc] initWithNibName:filter bundle:nil];

}

While there were good suggested solutions given for this question, I discovered what I needed is the NSClassFromString method. Here is a final implementation:

- (void)filterSelected:(NSString *)filter
{
    //self.filternameclassinstancegohere = ….;
    self.myViewController = [[NSClassFromString(filter) alloc] initWithNibName:filter bundle:nil];

}
梦罢 2024-12-25 01:42:46

考虑使用一个带有字符串键的 NSMutableDictionary 实例变量,而不是 40 个实例变量。

Consider using one NSMutableDictionary instance variable with string keys rather than 40 instance variables.

南薇 2024-12-25 01:42:46

您可以使用 NSSelectorFromString() 创建任意选择器:

SEL methodName = NSSelectorFromString(filter);
[self performSelector:methodName];

这将调用上面示例中的方法 colorFilter 。

在调用之前也最好检查一下 respondsToSelector

You can create an arbitrary selector using NSSelectorFromString():

SEL methodName = NSSelectorFromString(filter);
[self performSelector:methodName];

This will call a method colorFilter in your example above.

Would be wise to check with respondsToSelector before calling, too.

栀子花开つ 2024-12-25 01:42:46

如果过滤器值只能是少量、恒定数量的事物,则只需使用枚举和 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;
  }
}

如果过滤器值集很大并且可能经常更改,那么您也可以使用 键值编码。它更复杂但更灵活。

If the filter value can only be a small, constant number of things, just use an enumeration and a switch statement:

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;
  }
}

If the set of filter values is large and could change frequently, then you could also use Key-Value Coding. It's more complicated but more flexible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文