Van*_*nel 3 enums objective-c ios
我正在开发一个带有最新SDK的iOS应用程序.
我有这个枚举:
typedef enum BoxTypeValues {
Speed,
FPS,
Altitude,
Location,
Accuracy
} BoxType;
Run Code Online (Sandbox Code Playgroud)
我想迭代抛出它的所有值并将它们转换为NSString.
我这样做,但它很难编码:
+ (NSArray*)BoxTypeValues
{
return [NSArray arrayWithObjects:@"Speed", @"FPS", @"Altitude", @"Location",
@"Accuracy", nil];
}
+ (NSString*)BoxTypeToString:(BoxType)aType
{
NSString* result = nil;
switch (aType)
{
case Speed:
result = @"Speed";
break;
case FPS:
result = @"FPS";
break;
case Altitude:
result = @"Altitude";
break;
case Location:
result = @"Location";
break;
case Accuracy:
result = @"Accuracy";
break;
default:
break;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
将枚举值转换为字符串是宏可以帮助很多的极少数情况之一.例如:
- (NSString*)BoxTypeToString:(BoxType)aType
{
#define CASE(VALUE) case (VALUE): return @( #VALUE )
switch (aType) {
CASE(Speed);
CASE(FPS);
CASE(Altitude);
CASE(Location);
CASE(Accuracy);
default:
// should not get here
assert(0);
break;
}
#undef CASE
return nil;
}
Run Code Online (Sandbox Code Playgroud)
您的BoxTypeValues方法将如下所示:
- (NSArray*)BoxTypeStringValues
{
return @[
[self BoxTypeToString:Speed],
[self BoxTypeToString:FPS],
[self BoxTypeToString:Altitude],
[self BoxTypeToString:Location],
[self BoxTypeToString:Accuracy]
];
}
Run Code Online (Sandbox Code Playgroud)
即使在重构操作重命名枚举值之后,这仍然可以很好地工作.您可能希望为CASE宏提供某种唯一的前缀,以避免与其他代码冲突.
至于枚举枚举值,除非你可以依赖于顺序值并使用标准for循环(正如其他人所建议的那样),否则你运气不好.
| 归档时间: |
|
| 查看次数: |
3265 次 |
| 最近记录: |