2012-04-21 17 views
11
  1. Wird jeder Wert eines typedef enum als int behandelt?Wie konvertiert man Typedef Enum zu NSNumber?

    Z. B. angesichts der folgenden typedef enum:

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

    Wie kann ich wissen, welche Methode zu verwenden, um eine NSNumber zu schaffen?

    + (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); 
    

    Ich denke +[NSNumber numberWithInt:] die richtige Methode ist, es zu benutzen, weil die accepted answer to Best way to implement Enums with Core Data verwendet. Z.B .:

    [NSNumber numberWithInt:UIViewAnimationCurveLinear] 
    

    Aber wenn +[NSNumber numberWithInt:] richtig ist, dann warum?

  2. Für eine bitweise enum, z.B .:

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

    Ich vermute, dass +[NSNumber numberWithUnsignedInteger:] die richtige Methode ist, weil dort zu verwenden, eine explizite NSUInteger nach typedef ist. Richtig? Z.B .:

    [NSNumber numberWithUnsignedInteger:UIViewAutoresizingNone] 
    

Antwort

16

heute moderne Syntax kann verwendet werden:

@(UIViewAnimationCurveLinear)

6

[NSNumber numberWithInt: your_enum_int_variable];

+0

Sie schaukeln! Danke dafür. –