如何使用 `typedef NS_ENUM` 到 return `float` 值?
How to use `typedef NS_ENUM` to return `float` values?
在下面的代码()中,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
值用于 return float
大 (1.5)、中 (1.0)、小 (0.5) 和细线 (0.25) 的值?
注意:我的 earlier post that led no where despite this and this
的更简单版本
在 Swift 中,您可以对枚举使用双精度类型
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/
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];
请注意,这不如第一种方法安全。如果您的枚举值设置为有效枚举值以外的其他值,或者如果您添加新的枚举值但忘记更新数组中的值,它可能会崩溃。
在下面的代码()中,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
值用于 return float
大 (1.5)、中 (1.0)、小 (0.5) 和细线 (0.25) 的值?
注意:我的 earlier post that led no where despite this and this
的更简单版本在 Swift 中,您可以对枚举使用双精度类型
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/
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];
请注意,这不如第一种方法安全。如果您的枚举值设置为有效枚举值以外的其他值,或者如果您添加新的枚举值但忘记更新数组中的值,它可能会崩溃。