我有一个成员变量告诉单位我测量的值,如厘米,公里,秒,小时等。
现在这些都是枚举, 当我显示相应的字符串时,我创建了一个方法,为这些枚举返回相应的字符串。
与Java不同,此处的枚举不能与其相关联。
所以我必须明确地执行if-else-if链或switch case来返回正确的字符串。
我是Objective C的新手。在这种情况下我应该遵循哪些好的做法?
答案 0 :(得分:1)
afaik Objective-C枚举只是老式的C枚举...所以也许你可以为它们使用整数值?
答案 1 :(得分:0)
我想如果你的枚举值从0开始增加你可以使用某种数组访问:
const char *distanceUnitToString2(enum DistanceUnit unit)
{
const char *values[] = {
"cm",
"m",
"km"
};
// do some sanity checking here
// ...
return values[unit];
}
但这对我来说有点不稳定。如果您有负值,或者您正在使用像1 << 8
这样的位掩码式枚举值,该怎么办?你将最终使用一个非常大的数组。
您也可以使用开关并使用宏稍微改进一下。像这样:
const char *distanceUnitToString(enum DistanceUnit unit)
{
#define CASE(UNIT, STRING) case (UNIT): return (STRING)
switch (unit) {
CASE(kCentimeters, "cm");
CASE(kMeters, "m");
CASE(kKiloMeters, "km");
default:
// should not get here
assert(0);
break;
}
#undef CASE
}
但是你并没有真正节省那么多而不是使用宏。
答案 2 :(得分:0)
Martin James的评论是正确的答案。并使用枚举的定义,如:
enum units { cm = 0, m, km };
通过这种方式,您可以确保您的枚举转换为正确的索引值。