我有一个包含多个值的枚举:
枚举{value1,value2,value3} myValue;
在我的应用程序中的某个点上,我希望检查枚举的哪个值现在是活动的。我正在使用NSLog,但是我不清楚如何显示枚举的当前值(value1/value2/value3/etc...)作为NSLog的NSString。
有没有人?
发布于 2011-07-13 02:08:29
答案在这里:a few suggestions on implementation
归根结底,Objective-C
使用的是一个常规的、旧的C
enum
,它只是一组美化的整数。
给定一个如下所示的enum
:
typedef enum { a, b, c } FirstThreeAlpha;
您的方法将如下所示:
- (NSString*) convertToString:(FirstThreeAlpha) whichAlpha {
NSString *result = nil;
switch(whichAlpha) {
case a:
result = @"a";
break;
case b:
result = @"b";
break;
case c:
result = @"c";
break;
default:
result = @"unknown";
}
return result;
}
发布于 2013-07-11 23:27:33
我不喜欢将枚举放在堆上,而不提供堆函数进行转换。这是我想出来的:
typedef enum {value1, value2, value3} myValue;
#define myValueString(enum) [@[@"value1",@"value2",@"value3"] objectAtIndex:enum]
这使得枚举和字符串声明紧密结合在一起,以便在需要时轻松更新。
现在,在代码中的任何地方,您都可以像这样使用枚举/宏:
myValue aVal = value2;
NSLog(@"The enum value is '%@'.", myValueString(aVal));
outputs: The enum value is 'value2'.
为了保证元素索引,您总是可以显式地声明start(或all)枚举值。
enum {value1=0, value2=1, value3=2};
发布于 2014-02-21 23:08:39
这将由编译器进行验证,因此您不会意外地混淆索引。
NSDictionary *stateStrings =
@{
@(MCSessionStateNotConnected) : @"MCSessionStateNotConnected",
@(MCSessionStateConnecting) : @"MCSessionStateConnecting",
@(MCSessionStateConnected) : @"MCSessionStateConnected",
};
NSString *stateString = [stateStrings objectForKey:@(state)];
var stateStrings: [MCSessionState: String] = [
.notConnected : "MCSessionState.notConnected",
.connecting : "MCSessionState.connecting",
.connected : "MCSessionState.connected"
]
var stateString = stateStrings[MCSessionState.Connected]
更新:一种更快速的方式是扩展符合CustomStringConvertible
的枚举。此外,通过这种方式,编译器将确保实现底层枚举中的每个新添加(而使用数组则不会),因为switch
语句必须是详尽的。
extension MCSessionState: CustomStringConvertible {
public var description: String {
switch self {
case .notConnected:
return "MCSessionState.notConnected"
case .connecting:
return "MCSessionState.connecting"
case .connected:
return "MCSessionState.connected"
@unknown default:
return "Unknown"
}
}
}
// You can use it like this.
var stateString = MCSessionState.connected.description
// Or this.
var stateString = "\(MCSessionState.connected)"
https://stackoverflow.com/questions/6331762
复制相似问题