如何使用 `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];

请注意,这不如第一种方法安全。如果您的枚举值设置为有效枚举值以外的其他值,或者如果您添加新的枚举值但忘记更新数组中的值,它可能会崩溃。