在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你可以看到上面的代码如何用一个单一的类型名称更清楚.你还应该为你的所有类型名称添加一个两个或三个字母的前缀(和这个函数)避免命名冲突.)
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中向枚举添加方法。我只是给出了使用带字符串枚举的解决方案。
| 归档时间: |
|
| 查看次数: |
4861 次 |
| 最近记录: |