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

Ben*_*ero 6 enums 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

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

NS_ENUM(NSInteger, Toppings) {
  PEPPERONI,
  EXTRA_CHEESE,
  SECRET_SAUCE
};
Run Code Online (Sandbox Code Playgroud)

然后我很难过.我该如何制作toString()方法?我知道它相当复杂并且使用了一些特定于Java的行为,但我确信有一种方法.

我唯一想到的是拥有一个具有此功能的独立助手类,但这看起来有点多,不是吗?

and*_*n22 17

不幸的是,没有办法向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";
    }
}
Run Code Online (Sandbox Code Playgroud)

(旁注:你应该命名你的枚举Topping而不是 - Toppings你可以看到上面的代码如何用一个单一的类型名称更清楚.你还应该为你的所有类型名称添加一个两个或三个字母的前缀(和这个函数)避免命名冲突.)

  • Swift方法:太简单了!只需编写一个函数,除了把它放在枚举的`{`中并引用`self`! (3认同)

Can*_*ren 5

NSString * const ToppingsList[] = {
    [PEPPERONI] = @"Pepperoni",
    [EXTRA_CHEESE] = @"Extra Cheese",
    [SECRET_SAUCE] = @"Secret Sauce",
};
NSLog("Topping: %@", ToppingList[PEPPERONI]);
Run Code Online (Sandbox Code Playgroud)

声明枚举后,可以将其添加为使用类型字符串。好像toString()方法

编辑:同时@ andyvn22是正确的。无法在Objective-C中向枚举添加方法。我只是给出了使用带字符串枚举的解决方案。