2012-04-21 13 views
11
  1. ¿Cada valor de typedef enum se trata como int?Cómo convertir typedef enum a NSNumber?

    por ejemplo, dada la siguiente typedef enum:

    // UIView.h 
    
    typedef enum { 
        UIViewAnimationCurveEaseInOut, 
        UIViewAnimationCurveEaseIn, 
        UIViewAnimationCurveEaseOut, 
        UIViewAnimationCurveLinear 
    } UIViewAnimationCurve; 
    

    ¿Cómo sé qué método utilizar para crear un NSNumber?

    + (NSNumber *)numberWithShort:(short)value; 
    + (NSNumber *)numberWithUnsignedShort:(unsigned short)value; 
    + (NSNumber *)numberWithInt:(int)value; 
    + (NSNumber *)numberWithUnsignedInt:(unsigned int)value; 
    + (NSNumber *)numberWithLong:(long)value; 
    + (NSNumber *)numberWithUnsignedLong:(unsigned long)value; 
    + (NSNumber *)numberWithLongLong:(long long)value; 
    + (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; 
    + (NSNumber *)numberWithInteger:(NSInteger)value NS_AVAILABLE(10_5, 2_0); 
    + (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0); 
    

    creo +[NSNumber numberWithInt:] es el método correcto de usar debido a la accepted answer to Best way to implement Enums with Core Data la usa. Ej .:

    [NSNumber numberWithInt:UIViewAnimationCurveLinear] 
    

    Pero, si +[NSNumber numberWithInt:] es correcto, entonces ¿por qué?

  2. Para un bit a bit enum, por ejemplo .:

    enum { 
        UIViewAutoresizingNone     = 0, 
        UIViewAutoresizingFlexibleLeftMargin = 1 << 0, 
        UIViewAutoresizingFlexibleWidth  = 1 << 1, 
        UIViewAutoresizingFlexibleRightMargin = 1 << 2, 
        UIViewAutoresizingFlexibleTopMargin = 1 << 3, 
        UIViewAutoresizingFlexibleHeight  = 1 << 4, 
        UIViewAutoresizingFlexibleBottomMargin = 1 << 5 
    }; 
    typedef NSUInteger UIViewAutoresizing; 
    

    supongo que +[NSNumber numberWithUnsignedInteger:] es el método correcto de usar porque no es una explícita NSUInteger después typedef. ¿Correcto? Ej .:

    [NSNumber numberWithUnsignedInteger:UIViewAutoresizingNone] 
    

Respuesta

16

sintaxis moderna Hoy en día se puede utilizar:

@(UIViewAnimationCurveLinear)

6

[NSNumber numberWithInt: your_enum_int_variable];

+0

You rock! Gracias por esto. –