objective c - كيفية استخدام `تيبيديف NS_ENUM` للعودة` القيم float`؟




objective-c enums (2)

في التعليمات البرمجية ( أدناه ) يتم الإعلان عن LINE_WIDTH هو LINE_WIDTH للتعداد حيث الأسماء الكبيرة والمتوسطة والصغيرة والشعر هي ثوابت int .

    typedef NS_ENUM(NSInteger, LINE_WIDTH)
    {
        LINE_WIDTH_Large,
        LINE_WIDTH_Medium,
        LINE_WIDTH_Small,
        LINE_WIDTH_Hairline    
    };

كيف يمكنني استخدام قيم int هذه لإرجاع قيم float لارج (1.5) و مديوم (1.0) و سمال (0.5) و هيرلين (0.25)؟

ملاحظة: نسخة أبسط من مشاركتي السابقة التي أدت إلى أي مكان على الرغم من هذا و هذا


في سويفت يمكنك استخدام نوع مزدوج لل إنومز

enum Constants: Double {
    case π = 3.14159
    case e = 2.71828
    case φ = 1.61803398874
    case λ = 1.30357
}

لمعرفة الكثير عن الاستخدام العملي للأونومات في سريعة يرجى الرجوع https://appventure.me/2015/10/17/advanced-practical-enum-examples/


لا يدعم الهدف- 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];

لاحظ أن هذا أقل أمانا من النهج الأول. من المرجح أن تحطم إذا تم تعيين قيمة إنوم إلى شيء آخر غير قيمة إنوم صالحة أو إذا قمت بإضافة قيمة إنوم جديدة ولكن ننسى لتحديث القيم في الصفيف.





typedef