如何使用`typedef NS_ENUM`返回`float`值?

时间:2017-05-30 00:30:15

标签: objective-c enums floating-point int typedef

在代码(下面)中,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 postthis

,但我的this的更简单版本却没有引领

2 个答案:

答案 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/