objective-c enums floating-point int typedef

objective c - ¿Cómo se usa `typedef NS_ENUM` para devolver los valores` float`?



objective-c enums (2)

En Swift puedes usar type double para enums

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

Para saber mucho sobre el uso práctico de las enumeraciones en swift, consulte https://appventure.me/2015/10/17/advanced-practical-enum-examples/

En el código (a continuación ) LINE_WIDTH se declara typedef para la enumeración, donde los nombres Large, Medium, Small y Hairline son constantes int .

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

¿Cómo puedo usar estos valores int para devolver los valores float de Large (1.5), Medium (1.0), Small (0.5) y Hairline (0.25)?

NOTA: una versión más simple de mi publicación anterior que no llevó a ninguna parte a pesar de esto y esto


Objective-C no admite valores enum no enteros. Su única opción es proporcionar un código que convierta el valor enum en un valor float .

Una opción es crear una función simple como:

float LINE_WIDTH_float(LINE_WIDTH width);

Ponlo en la misma .h que la declaración enum. A continuación, agregue lo siguiente a algún archivo .m o .c apropiado:

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; } }

Entonces, en algún lugar tienes un valor enum:

LINE_WIDTH someWidth = LINE_WIDTH_Medium; float width = LINE_WIDTH_float(someWidth);

Otra opción sería definir una matriz de float .

En el mismo .h como enum add:

extern float *LINE_WIDTH_float;

Luego, en algunos .m o .c apropiados, puede agregar:

float *LINE_WIDTH_float = { 1.5, 1.0, 0.5, 0.25 };

Entonces para usar esto puedes hacer:

LINE_WIDTH someWidth = LINE_WIDTH_Medium; float width = LINE_WIDTH_float[someWidth];

Tenga en cuenta que esto es menos seguro que el primer enfoque. Es probable que se cuelgue si su valor enum está configurado en algo distinto a un valor enum válido o si agrega un nuevo valor enum, pero se olvida de actualizar los valores en la matriz.