我可以向Objective-C枚举添加方法吗?

本·莱吉耶罗

在Java中,我有一个枚举,例如:

public enum Toppings {
  PEPPERONI,
  EXTRA_CHEESE,
  SECRET_SAUCE;

  @Override
  public String toString() {
    switch(this) {
      case EXTRA_CHEESE: return "Extra Cheese";
      case SECRET_SAUCE: return "Secret Sauce™";
    }
    String name = name();
    return name.charAt(0) + name.substring(1, name.length()).replace('_', ' ').toLowerCase();
  }
}

我想在Objective-C中重新制作。到目前为止,我已经做到了:

NS_ENUM(NSInteger, Toppings) {
  PEPPERONI,
  EXTRA_CHEESE,
  SECRET_SAUCE
};

然后我被困住了。我该怎么做toString()我知道它相当复杂,并且使用了一些特定于Java的行为,但是我敢肯定有办法。

唯一想到的就是拥有一个单独的具有此功能的帮助器类,但这似乎有点多了,不是吗?

andyvn22

不幸的是,没有办法向Objective-C枚举添加方法(旁注:您可以向Swift枚举添加方法。)

传统上,独立函数将用于此目的,其主体类似于Java方法:

NSString* NSStringFromToppings(Toppings toppings)
{
    switch (toppings)
    {
        case PEPPERONI: return @"Pepperoni";
        case EXTRA_CHEESE: return @"Extra Cheese";
        case SECRET_SAUCE: return @"Secret Sauce";
    }
}

(旁注:您应该命名您的枚举,Topping而不是-Toppings可以看到上面的代码如何使用单数类型的名称更清晰。您还应该在所有类型名称中添加两个或三个字母的前缀(以及此函数)以避免命名冲突。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java枚举可以添加return方法吗?

我可以向 LIST<> 添加扩展方法吗?

我可以向对象方法添加属性吗?

我可以在不使用 Objective-C(纯 Swift)的情况下向 React Native 公开 Swift 函数吗?

我可以使用Int从Swift设置Int枚举类型的Objective-C属性吗

C#属性可以向方法添加参数吗?

我们可以更改原子枚举,还是可以向原子枚举添加任何新值?

我可以为我在Objective-C中的弃用添加修复程序吗?

C ++枚举类可以有方法吗?

我可以在不覆盖整个方法的情况下向继承的方法添加代码吗?

我可以向JavaScript函数添加属性吗?

我可以向DOM对象添加任意属性吗?

我可以通过Javascript向表单添加参数吗?

我可以在javascript中向“窗口”对象添加属性吗?

我可以向div添加额外的转换吗?

我可以在 JavaScript 中向函数添加/声明属性吗?

我可以向 UICollectionView 中的 customCell 添加操作吗?

我可以向分区添加唯一约束吗?

我可以向表格查询添加浮动列吗?

我可以在Java枚举中添加函数吗?

我可以向现有的静态类添加扩展方法吗?

我可以向Django查询集添加自定义方法吗?

我可以向IEnumerable.Any方法的LINQ查询中动态添加参数吗?

我可以向Google Apps脚本类添加自定义方法吗?

我可以在Linux平台中向C printf添加新的格式说明符类型吗

我们可以在C ++中向数组添加整数吗

我可以在Objective C类别中声明一个非公共方法吗?

我可以在目标C中将枚举用作属性吗

我可以为我的自定义主题向 SUI.COLORS 添加新颜色吗?