在代码(下面)中,LINE_WIDTH
被声明为枚举typedef
,其中名称Large,Medium,Small和Hairline为int
常量。
typedef NS_ENUM(NSInteger, LINE_WIDTH)
{
LINE_WIDTH_Large,
LINE_WIDTH_Medium,
LINE_WIDTH_Small,
LINE_WIDTH_Hairline
};
如何使用这些int
值返回大(1.5),中(1.0),小(0.5)和细线(0.25)的float
值?
注意:虽然earlier post和this
,但我的this的更简单版本却没有引领答案 0 :(得分:1)
Objective-C不支持非整数枚举值。您唯一的选择是提供将枚举值转换为float
值的代码。
一种选择是创建一个简单的函数,例如:
float LINE_WIDTH_float(LINE_WIDTH width);
将它放在与枚举声明相同的.h中。然后将以下内容添加到适当的.m或.c文件中:
float LINE_WIDTH_float(LINE_WIDTH width) {
switch (width) {
case LINE_WIDTH_Large:
return 1.5f;
case LINE_WIDTH_Medium:
return 1.0f;
case LINE_WIDTH_Small:
return 0.5f;
case LINE_WIDTH_Hairline:
return 0.25f;
default:
return 0.0f;
}
}
所以某处你有一个枚举值:
LINE_WIDTH someWidth = LINE_WIDTH_Medium;
float width = LINE_WIDTH_float(someWidth);
另一种选择是定义一个float
的数组。
与枚举相同的.h:
extern float *LINE_WIDTH_float;
然后在某些适当的.m或.c中,您可以添加:
float *LINE_WIDTH_float = { 1.5, 1.0, 0.5, 0.25 };
然后使用它你可以:
LINE_WIDTH someWidth = LINE_WIDTH_Medium;
float width = LINE_WIDTH_float[someWidth];
请注意,这比第一种方法安全性低。如果您的枚举值设置为有效枚举值以外的其他值,或者您添加新的枚举值但忘记更新数组中的值,则可能会崩溃。
答案 1 :(得分:-1)
在Swift中,你可以使用double类型作为枚举
enum Constants: Double {
case π = 3.14159
case e = 2.71828
case φ = 1.61803398874
case λ = 1.30357
}
要了解有关swift实际使用枚举的信息,请参阅https://appventure.me/2015/10/17/advanced-practical-enum-examples/